【问题标题】:Filter rejected Promises过滤被拒绝的 Promise
【发布时间】:2016-12-03 11:04:07
【问题描述】:

我有一个 Promise 对象数组,我想在其中映射并过滤被拒绝的 Promise。

预期输出:

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

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

resolvedPromises 变量应该包含两个 successPromise 承诺的输出。

我将如何实现这样的算法?

【问题讨论】:

  • 失败与非失败如何区分?这两个物体长什么样子?
  • 看看over here。请注意,同步确定 Promise 的状态是不可能的,因此您将得到的最好的结果是一组已实现的 Promise(或其结果)的 Promise

标签: javascript node.js promise ecmascript-6


【解决方案1】:

您无法以同步方式检查标准 Promise,因此您无法按解决状态过滤数组。但是您可以使用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));

【讨论】:

  • 在 ES6 中,我什至会使用 Symbol("failed") 而不是空对象。
猜你喜欢
  • 2018-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-04
  • 2014-11-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多