老師,請問一下,這裡使用

来源: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使用场景非常少



0
0

晋级TypeScript高手,成为抢手的前端开发人才

轻松驾驭 TypeScript 高级用法, 突破前端成长瓶颈

871 学习 · 425 问题

查看课程