day91-Promise的并发迭代

前言

多任务执行。对所有Promise执行某个任务。


实现版本一

// Promise 的并发迭代
// 不太好的方法
if (!Promise.map) {
Promise.map = function (vals, cb) {
// 一个等待所有map的promise的新promise
return Promise.all(
// 一般数组把map(..),把值数组转换成为promise数组
vals.map(function (val) {
// 用val异步map之后决议的新promise替换val
return new Promise(function (resolve) {
cb(val, resolve)
})
})
)
}
}
// 这里不能发送异步reject信号,映射的回调中(cb(..))出现同步的异常或错误
// 主Promise.map(..)返回的Promise就会拒绝

较好的方法

// 较好的方法
let p1 = Promise.resolve(21)
let p2 = Promise.resolve(42)
let p3 = Promise.resolve('oops 404')
// 列表值加倍,即使是在Promise中
Promise.map([p1,p2,p3], function (pr, done) {
// 保证这一条本身就是Promise
Promise.resolve(pr)
.then(
// 提取值作为v
function (v) {
// map完成的v到新值
done(v*2)
},
// 或者map到promise拒绝消息
done
)
})
.then(function (vals) {
console.log(vals) // [42, 84, 'oops 404]
})
文章作者: lmislm
文章链接: http://lmislm.com/2019/04/12/2019-04-12/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 LMISLMのBlog