2016-07-28 260 views
2

我有一個Promise對象的數組,我想映射並過濾拒絕的承諾。過濾器拒絕承諾

預期輸出:

const promises = [ 
    failedPromise, 
    successPromise, 
    successPromise, 
]; 

const resolvedPromises = promises.map(promise => ???); 

resolvedPromises變量應容器兩個successPromise承諾的輸出。

我該如何實現這樣的算法?

+0

如何在從非失敗的區別失敗了嗎?這兩個物體是什麼樣的? – jcollum

+0

看看[在這裏](http://stackoverflow.com/a/30930421/1048572)。注意,不可能同步確定承諾的狀態,所以你得到的最好的結果是對一系列滿足承諾(或者結果)的承諾 – Bergi

回答

7

您無法以同步方式檢查標準承諾,因此您無法通過其解析狀態來過濾數組。但是,您可以僱用Promise.all獲取已解決值的列表。這裏有一個小竅門如何處理拒絕:

const promises = [ 
 
    Promise.resolve(1), 
 
    Promise.reject(2), 
 
    Promise.resolve(3) 
 
]; 
 

 
const FAIL_TOKEN = {}; 
 

 
const resolvedPromises = Promise.all(
 
    promises.map(p => p.catch(e => FAIL_TOKEN)) 
 
).then(
 
    values => values.filter(v => v !== FAIL_TOKEN) 
 
); 
 

 
resolvedPromises.then(values => console.log(values));

+1

在ES6中,我甚至使用'Symbol(「failed」)'而不是空對象。 – Bergi