关于Promise问个问题
大家面对forEach除了用Promise.all外,还有别的什么办法吗?比如我有一个数组,我要把异步得到的数据插入到数组里的每一个元素去,除了Promise.all之外,还有别的其他办法不?可以给个思路啥的
4 回复
这几个还是有点差别的哦
- forEach. 应该等同于 for循环 + await
- Promise.all 并发为 Infinity
- 还有 promise.map, 可以自定义并发, bluebird 有提供, https://github.com/magicdawn/promise.map 这个也可以
@magicdawn 是想请教一下,有一个数组,我要把异步得到的数据插入到数组里的每一个元素去,有什么办法呢?个人目前是通过for循环,把数据插入A数组里的每一个元素的操作赋值给一个新的数组B,然后再通过Promise.all(B)从而得到异步插入完成后的新的数组值,想问下还有别的思路不?
有一个数组,我要把异步得到的数据插入到数组里的每一个元素去,有什么办法呢?个人目前是通过for循环,把数据插入A数组里的每一个元素的操作赋值给一个新的数组B,然后再通过Promise.all(B)
forEach
async function fn(){
for(let i = 0, len = A.length; i < len; i++){
B[i] = await getData(A[i])
}
return B
}
Promise.all
Promise.all(A.map(getData))
promise.map
var pmap = require('promise.map');
// 5 为并发
pmap(A, getData, 5).then(function(B){
// B
}, function(err){
// blabla
})