Javascript中多个异步函数调用的优雅方式

时间:2013-05-14 13:35:13

标签: javascript asynchronous

我需要多次调用相同的异步函数,但是直到一个调用完成(即执行回调函数时)。所以我的代码看起来像这样:

syncFunc(a, function() {
    syncFunc(b, function() {
        syncFunc(c, function() {
            syncFunc(.....)
        });
    });
});

现在可以以某种方式缩短这个吗?我的第一个想法是使用for循环,如:

syncParams = [a, b, c, ...];
for(var i = 0;; i++) {
    syncFunc(syncParams[i], function() {
        if(i < syncParams.length - 1) {
            alert('finished');
            break;
        } else {
            continue;
        }
    }
}

但显然这不起作用,因为没有连接继续和中断到循环。我的另一个想法是,如果一个异步调用完成,则使用间隔检查每秒,然后使用下一个参数调用下一个,但这看起来太复杂了。没有使用某些库有什么简单的方法吗?

编辑:因为没有人理解库问题:我正在开发一个PhoneGap移动应用程序,而我正在使用它的IDE并不是要包含第三方库。我也很好奇这是如何工作的。

1 个答案:

答案 0 :(得分:0)

我看到你想每次用不同的参数调用该函数。然后async.forEachSeries将是最合适的。

如果你想每次使用相同的参数调用函数,async.whilst会运行良好。 https://github.com/caolan/async/#whilsttest-fn-callback

@Jack提到,这个问题可以自己做一个很好的答案:How to synch JavaScript callbacks?