过滤被拒绝的承诺

时间:2016-07-28 21:09:14

标签: javascript node.js promise ecmascript-6

我有一组Promise个对象,我想要映射并过滤被拒绝的Promises。

预期产出:

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

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

resolvedPromises变量应该容纳两个successPromise承诺的输出。

我如何实现这样的算法?

1 个答案:

答案 0 :(得分:9)

您无法以同步方式检查标准承诺,因此无法按其分辨率状态过滤阵列。但是您可以使用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));