lbwa / set.sh-stale

✍A place which is used to share my programming experiences in Chinese. 一个分享代码经历的地方。
https://set.sh
0 stars 0 forks source link

函数式编程 —— Promise 序列实例化 #26

Open lbwa opened 5 years ago

lbwa commented 5 years ago

实现 Promise 的顺序实例化,即仅当前一个 Promise 实例化状态 resolved 之后才开始调用下一个 Promise 实例化。此举不同于 Promise.all[].map() 中的并发实例化 Promise

/**
 * 
 * @param {promise[]} funcs 待实例化数组
 */
const promiseSerial = funcs => 
  funcs.reduce((promise, func) =>
    // 待上一次 promise 的状态 resolved 之后,调用下一个 promise,即 func
    // 并将运行 func 得到的结果与之前的 promise 返回的结果合并
    promise
      .then(result => func().then(Array.prototype.concat.bind(result)))
      .catch(console.error),
    // 初始值为一个空数组容器
    Promise.resolve([])
  )

Reference