逐个运行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秒钟完成