让我们说有一个数字数组,定期用setInterval
你需要获取和删除前5个元素,根据这5个数字,你需要做一些异步的东西,如下所示
根据某些数字从DB获取内容完全独立于使用其他数字执行相同操作。同样适用于提取的记录 s 。所以在1.和2. Promise.all
听起来都很棒,但事实是Promise.all
拒绝,如果任何通过的承诺拒绝,则与所描述的场景不能很好地协调。基本上,如果所有对DB的调用都解析了除最后一个拒绝的记录,我就无法继续成功的记录和记录。
因此无法通过本机Promise支持来解决这个问题,我调查了bluebird
与我很少/没有经验的人,这就是我发布此问题的原因。通过API参考,在我看来这可以很容易地用.reflect()
来解决?我尝试了什么:
setInterval(() => {
const firstFive = numbers.splice(0, 5)
Promise.all(firstFive.map((number) => firstAsync(number).reflect()))
.each((result, index) => {
if (result.isRejected()) {
return numbers.unshift(firstFive[index])
}
return Promise.all(result.value().map((record) => secondAsync(record).reflect()))
.each((result, index) => {
if(result.isRejected()) {
return numbers.unshift(firstFive[index])
}
})
})
}, 500)
我是否以预期的方式使用.reflect()
?除此之外,我盲目地猜测.each((result, index) => {...})
是.then((results) => results.forEach((result, index) => {...})
之类的语法糖,不是吗?
答案 0 :(得分:0)
我想知道你为什么要使用char
。你说五个数字完全相互独立,看起来你不需要等待他们五个人做任何事情。
所以只需单独处理它们:
Promise.all