每次回调后调用下一次迭代

Hum*_*ons 2 javascript node.js

假设我有以下代码,

function someFunction(){
    var i = 0;
    while (i < 10){
        someAsyncProcess(someField, function(err, data){
            i++;
            // i want the next iteration of the while loop to occur after this
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

someAsyncProcess 运行,并递增“i”。

但是,由于 JavaScript 的异步特性,while 循环在 i = 10 之前运行了数千次。如果我希望 while 循环恰好运行 10 次,该怎么办?如果我希望 while 循环仅在回调函数执行完成后才执行内部代码怎么办?

是否可以在没有 setTimeout 函数的情况下做到这一点?

请注意,我对 JavaScript 还比较陌生,所以如果我错误地使用了任何术语,请纠正我。

Fel*_*ing 5

while是同步的。您不能让它等到异步进程完成。在这种情况下不能使用while循环。

相反,您可以将代码放入函数中,并在满足条件时再次调用函数本身。

例子:

function someFunction() {
    var i = 0;
    function step() {
        if (i < 10) {
            someAsyncProcess(someField, function(err, data) {
                i++;
                step();
            });
        }
    }
    step();
}
Run Code Online (Sandbox Code Playgroud)

有相当多的库为此提供了现成的解决方案。您可能还想研究一下一般的Promise 。