promise.all和promise.race的區別


參考文檔:阮一峰 - ECMAScript 6 入門

  promise.all 和 promise.race 都是用於將多個Promise實例包裝成一個新的Promise實例。

  區別在於promise.all內的promise實例執行成功后返回一個集合。 promise.race則是返回promise實例中第一個執行完的函數。

  promise.all :  

    1、只有 firstPromise secondPromise 的狀態都變成fulfilled,Promise 的狀態才會變成fulfilled,此時 所有promise實例 的返回值組成一個數組,傳遞給Promise 的回調函數。

    2、只要 firstPromise secondPromise 之中有一個被rejected,Promise 的狀態就變成rejected,此時 第一個被reject的實例的 返回值,會傳遞給Promise 的回調函數。

            const firstPromise = new Promise((res, rej) => {
                setTimeout(res, 500, [{ a: 1 }]);
            });
            const secondPromise = new Promise((res, rej) => {
                setTimeout(res, 100, [{ n: 2 }]);
            });
            
            Promise.all([firstPromise, secondPromise]).then(res => {
                console.log(res)    // [[{a:1}],[{n:2}]] 
            });

  promise.race : 

    只要 firstPromise secondPromise 中有一個實例率先改變狀態,Promise 的狀態就跟着改變。那個率先改變的 Promise 實例的返回值,就傳遞給Promise 的回調函數。

    當promise實例超過5s未返回結果,Promise 的狀態就會變為rejected,從而觸發catch方法指定的回調函數。

        const firstPromise = new Promise((res, rej) => {
                setTimeout(res, 500, [{ a: 1 }]);
            });
            const secondPromise = new Promise((res, rej) => {
                setTimeout(res, 100, [{ n: 2 }]);
            });
            
            Promise.race([firstPromise, secondPromise]).then(res => {
                console.log(res) // [{ n: 2 }]  
       });

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM