使动态创建的承诺按顺序执行 [英] Make dynamically created promises execute in sequence
本文介绍了使动态创建的承诺按顺序执行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如何动态创建一系列承诺并按顺序执行它们?
How can I dynamically create a series of promises and have them execute in sequence?
pseudocode
for x=0 to maxValue
promiseArray.push(createNewPromise(x))
executeAllPromisesSequentially(promiseArray)
其中
executeAllPromisesSequentially is functionally equivalent to
promise1()
.then(promise2)
.then(promise3)
etc
...
推荐答案
我的要点
let tasks = [ /* ... */ ]
let promise = tasks.reduce((prev, task) => {
return prev.then(() => {
return task();
});
}, Promise.resolve());
promise.then(() => {
//All tasks completed
});
顺序迭代模式
Sequential Iteration Pattern
let tasks = [ /* ... */ ]
let promise = Promise.resolve();
tasks.forEach(task => {
promise = promise.then(() => {
return task();
});
});
promise.then(() => {
//All tasks completed
});
顺序迭代示例
Sequential Iteration Example
function spiderLinks(currentUrl, body, nesting) {
let promise = Promise.resolve();
if(nesting === 0) {
return promise;
}
const links = utilities.getPageLinks(currentUrl, body);
links.forEach(link => {
promise = promise.then(() => spider(link, nesting - 1));
});
return promise;
}
这篇关于使动态创建的承诺按顺序执行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文