Javascript - 在递归函数末尾返回带有延迟的承诺



我对javascript很陌生,并试图在Javascript中创建一个递归函数,该函数应该在递归结束时返回一个承诺。但是,通过下面的代码片段,我得到了单次迭代返回的承诺。

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);

但是,这也无济于事。有人可以帮我解决这个问题吗?

您可以使用递归函数调用的 then 方法链接递归函数调用返回的承诺,如下所示:

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);

请注意,我在这里从最大值数到 1,因为首先解析链式 then 语句末尾的承诺(可能有很多优化此代码😀的可能性(

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

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