Javascript-在递归函数结尾处延迟返回Return Promise

时间:2018-08-15 09:22:17

标签: javascript recursion promise

我对javascript很陌生,它试图在Javascript中创建一个递归函数,该函数应该在递归结束时返回一个promise。但是,使用下面的代码段,我得到了一次迭代返回的Promise。

function delayedIteration(i) {
    var promises = [];
    var promise = new Promise(function(resolve, reject) {
        if(i >= 10) {
            return;
        }
        console.log("i: "+i);
        i++;
        setTimeout(delayedIteration.bind({}, i), 3000);
        resolve("resolve");
    });
    promises.push(promise);
    return Promise.all(promises);
}

我也尝试添加,

setTimeout(promises.push(delayedIteration.bind({}, i)), 3000);

但是,它也无济于事。有人可以帮我这个吗。

2 个答案:

答案 0 :(得分:1)

您可以使用它们的then方法链接由递归函数调用返回的promise,例如:

function delayedIteration(max, i = max + 1) {
    return new Promise(resolve => {
        if (i === 1) {
            resolve();
            return;
        }
        delayedIteration(max, --i).then(() =>
            setTimeout(() => {
                console.log(i);
                resolve();
            }, 3000)
        );
    })
}
delayedIteration(10);

请注意,我这里是从max到1进行计数,因为链接的then语句末尾的promise首先会被解析(可能有很多可能性可以优化此代码)

请参见JSFiddle:https://jsfiddle.net/pahund/q4cuwse9/

答案 1 :(得分:0)

承诺会立即返回,但稍后会解决。 一个诺言基本上将一个“未来结果”封装到一个函数中。