2016-07-28 220 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