逐个运行JavaScript的Promise
JavaScript的Promise是异步的,这意味着它们是并行执行的。这对于性能来说很好,但有时您需要按顺序执行Promise(逐个)。这可以通过将Promise链接在一起,使用Array.prototype.reduce()
来轻松实现。链中的每个Promise在解决时返回下一个Promise,使用Promise.prototype.then()
。
const runPromisesInSeries = ps =>
ps.reduce((p, next) => p.then(next), Promise.resolve());
const delay = d => new Promise(r => setTimeout(r, d));
runPromisesInSeries([() => delay(1000), () => delay(2000)]);
// 逐个执行每个Promise,总共需要3秒钟完成