如果我传入参数,则不会异步调用函数

时间:2014-02-10 11:38:28

标签: javascript asynchronous callback settimeout

我正在尝试使用回调函数。我想让我的回调异步,根据我的理解,其中一种方法是调用setTimeout函数来创建我的同步函数async。这很有效,除非我尝试将参数传递给setTimeout中的回调:

这是异步:

var callback_function = function (funcArg) {
    console.log("From Main Function");
    setTimeout(funcArg, 10); // WATCH THIS LINE
    console.log("From Main Function 2");
};

callback_function(function (arg) {
    console.log("From Callback");
    console.log(arg);
});

console.log("This should run before callback");

输出:
从主要功能
从主要功能2
这应该在回调之前运行 来自回电
未定义

这不是异步:

var callback_function = function (funcArg) {
    console.log("From Main Function");
    setTimeout(funcArg("Test"), 10); // WATCH THIS LINE
    console.log("From Main Function 2");
};

callback_function(function (arg) {
    console.log("From Callback");
    console.log(arg);
});

console.log("This should run before callback");

输出:
从主要功能
来自回电
测试
从主要功能2
这应该在回调之前运行

知道为什么会这样吗?尽管传入参数,我怎么能异步运行函数?

1 个答案:

答案 0 :(得分:2)

你没有将函数传递给setTimeout,而是调用你的函数并传递结果。

更改

setTimeout(funcArg("Test"), 10);

setTimeout(function(){ funcArg("Test")}, 10);