使用promise的异步递归

yos*_*reb 5 javascript recursion node.js promise

所以我试图将我的代码转移到"Promise world",并且在很多地方,当我不得不"循环"异步功能时 - 我只是以这种方式使用递归

function doRecursion(idx,callback){
    if(idx < someArray.length){
        doAsync(function(){
            doRecursion(++idx,callback)
        });
    }else{
        callback('done!')
    }
}
doRecursion(0,function(msg){
    //...
});
Run Code Online (Sandbox Code Playgroud)

现在我正试图改变进入Promise世界,我很困惑

var Promise = require('bluebird')
function doRecursion(idx){
    return new Promise(function(resolve){
        if(idx < someArray.length){
            doAsync(function(){
                //... doRecursion(++idx)
                // how do i call doRecusion here....
            });
        }else{
            resolve('done!')
        }
    });
}
doRecursion(0).then(function(msg){
    //...
});
Run Code Online (Sandbox Code Playgroud)

谢谢.

Ben*_*une 4

我会采用这种Promise.all方法。

其作用是等待数组中的所有承诺都已解决。该映射会将异步方法应用于数组中的每个项目并返回一个承诺。

function doAsyncP() {
    return new Promise((resolve) => {
        doAsync(function() {
            resolve();
        });
    });
}

Promise.all(
    someArray.map(doAsyncP)
).then((msg) => {
    //we're done.
});
Run Code Online (Sandbox Code Playgroud)