2016-10-01 70 views
0

例:過濾/恢復Promise.all導致

function myFunc(args ...){ 
    ... 
    return Promise.all(myPromisesArray) 
} 

如果內部myPromisesArray一個承諾失敗了,我只會在返回值的拒絕理由。

有沒有辦法恢復所有其他解決的值?

+0

你控制你正在執行的承諾? – synthet1c

+0

結果呢?不,這是任意的。 –

+0

不,我的意思是你正在寫承諾的代碼。如果你不調用拒絕函數並返回結果。承諾一旦失敗就會失敗並立即停止執行 – synthet1c

回答

4

如果你使用Q,那麼有一個叫Q.allSettled的函數,基本上可以滿足你的要求。

否則,這個簡單的函數會給你的所有承諾的結果,並告訴你是成功還是失敗。然後,你可以做任何你需要做的承諾成功或失敗。

/** 
 
* When every promise is resolved or rejected, resolve to an array of 
 
* objects 
 
* { result: [ Promise result ], success: true/false } 
 
**/ 
 
function allSettled(promises) { 
 
    return Promise.all(
 
    promises.map(
 
     promise => promise.then(
 
     // resolved 
 
     (result) => ({ result: result, success: true }), 
 
     // rejected 
 
     (result) => ({ result: result, success: false }) 
 
    ) 
 
    ) 
 
); 
 
} 
 

 
// example usage: 
 
const one = Promise.resolve(1); 
 
const two = Promise.reject(2); 
 
const three = Promise.resolve(3); 
 

 
allSettled([ one, two, three ]) 
 
    .then((results) => { 
 
    console.log(results[0]); // { result: 1, success: true } 
 
    console.log(results[1]); // { result: 2, success: false } 
 
    console.log(results[2]); // { result: 3, success: true } 
 
    });