不能在meteor app上使用setTimeout()函数

时间:2016-02-21 19:53:27

标签: javascript meteor settimeout

我不明白不同的行为:

first.js

Template.example.onRendered(function() {
    timerId = setTimeout ( function() { console.log(Random.id()) }, 3000 );
});

所以这会在3秒钟后在控制台上给我一个随机ID - 这正是应该做的。

second.js

function anything() {
    console.log(Random.id());
}

Template.example.onRendered(function() {
    timerId = setTimeout ( anything(), 3000 );
});

这给了我即时的id,所以3秒后就不会有任何动作了。这不是我想要的,但我需要使用一个命名函数,所以第一次尝试对我来说还不够。

1 个答案:

答案 0 :(得分:1)

您正在调用您的函数,而不是将其传递给setTimeout

这样做:

timerId = setTimeout(function() { anything(); }, 3000);  // anonymous function calling the named function

或者

timerId = setTimeout(anything, 3000);  // passing the named function without calling

或者

timerId = setTimeout(anything.bind(null), 3000); // new function with "this" pointing to null

您最初所做的相当于:

timerId = setTimeout(undefined, 3000); // function without return statement will "return" undefined