我对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);
但是,它也无济于事。有人可以帮我这个吗。
答案 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)
承诺会立即返回,但稍后会解决。 一个诺言基本上将一个“未来结果”封装到一个函数中。