2016-01-21 68 views
0

我有一種情況,我正在等待幾個事件發生。我看到很多很好的例子,說明如何使用setTimeout使用命名函數,但是有沒有辦法在超時時使用某種匿名方法?anonymous setTimeout函數

代碼目前看起來是這樣的:

testForObject(); 

function testForObject() { 
    if (typeof marksObjectName === 'object') { 
      // blah blah 
    } else { 
     console.log('marksObjectName does not exist quite yet'); 
     setTimeout(function() { testForObject() }, 500); 
    } 
} 

,所以我想知道是否有某種方式命名的setTimeout在功能和使用匿名方法來代替,也許是這樣的:

setTimeout(function() { 
    if (typeof marksObjectName === 'object') { 
      // blah blah 
    } else { 
     console.log('marksObjectName does not exist quite yet'); 
    } 
}, 500); 

顯然這不起作用,但這是我第一次(也是唯一)的猜測。

非常感謝大家。

+0

你有沒有考慮使用的承諾,而不是超時? – Jason

回答

1

可以按如下方式命名函數。請注意,您需要把它else子句中的另一個超時時間內:

setTimeout(function timer() { 
 
    if (typeof marksObjectName === 'object') { 
 
    // blah blah 
 
    } else { 
 
    console.log('marksObjectName does not exist quite yet'); 
 
    setTimeout(timer, 500); 
 
    } 
 
}, 500);

+1

這可能是最好的答案 - 我希望避免使用任何函數名稱,但這可能是不可能的。然而,你的建議肯定是非常可讀和直觀的。可以選擇一個非常明顯的函數名稱,該名稱不在此代碼塊之外引用。謝謝。 – edwardsmarkf

+0

我已經選擇了這個答案。我能夠使用您的解決方案並使用您的模型嵌入另一個setTimeout。謝謝。 – edwardsmarkf

0

我相信帽子setInterval是你在找什麼。

setInterval(function() { if (typeof marksObjectName === 'object') { // blah blah } else { console.log('marksObjectName does not exist quite yet'); } }, 500);

+1

您將希望保留對時間間隔的引用,以便您可以在代碼準備停止查找時使用clearInterval(interval)。 – tanenbring

1

可以命名傳遞的功能,如

setTimeout(function myFunction() { 
    // ... 
}, 500); 
+0

我曾希望避免使用任何函數名來保持匿名。 – edwardsmarkf

+0

有不贊成的arguments.callee會指向匿名函數 – Leonardo