// polyfill安全的guard检查
if(!Promise.map) {
Promise.map = function(vals, cb) {
return Promise.all(
vals.map(function(val) {
return new Promise(function(resolve) {
cb(val, resolve);
})
})
);
}
}
// 如何使用
var p1 = Promise.resolve(21);
var p2 = Promise.resolve(42);
var p3 = Promise.reject('Oops');
// 把列表中的值加倍,即使是在Promise中
Promise.map([p1, p2, p3], function(pr, done){
// 保证这一条本身是一个Promise
Promise.resolve(pr)
.then(
// 提取值作为v
function(v) {
done(v * 2);
},
// 或者map到promise拒绝信息
done
);
}).then(function(vals) {
console.log(vals); // [42, 84, 'Oops']
})