老師,請問一下,這裡使用
来源:12-19 Promise.all 源码实现 2

慕粉3539270
2021-10-11
老師,請問一下 Promise.all 源码实现 2中,用index去判斷是不是等於promiseLength -1好像怪怪的,
因為forEach裡面每個promise都各自執行,有快有慢,有可能最後一個先去執行then,但是其他promise的then還沒執行。
function processData (resolveSuccess: any, index: number) {
allPromiseResolveSuccessValue[index] = resolveSuccess;
if(index === promisesLength -1 ) {
resolve(allPromiseResolveSuccessValue);
}
}
不確定是不是應該改成allPromiseResolveSuccessValue.filter(Boolean).length=== promisesLength (filter(Boolean)是因為有可能會是sparse aray)
function processData (resolveSuccess: any, index: number) {
allPromiseResolveSuccessValue[index] = resolveSuccess;
if(allPromiseResolveSuccessValue.filter(Boolean).length === promisesLength) {
resolve(allPromiseResolveSuccessValue);
}
}
感謝老師
写回答
1回答
-
keviny79
2021-10-11
同学理解反了,你说的是Promise.race ,不是Promise.all
官方 Promise.all 很有用,属于Promise 主要功能之一 它 的意思是:
获得的成功结果的编写时数组里面的数据顺序和Promise.all接收到的数组顺序是一致的,即p1的结果在前,p1的结果获取的比p2要早。
使用场景:在前端开发请求数据的过程中,有时会遇到发送多个请求并根据请求顺序获取和使用数据的场景,使用Promise.all , 但 Promise.race使用场景非常少
00
相似问题
object 类型 提示不让使用
回答 1
老师求救
回答 3