2016-01-21 84 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