我有一组Promise
个对象,我想要映射并过滤被拒绝的Promises。
预期产出:
const promises = [
failedPromise,
successPromise,
successPromise,
];
const resolvedPromises = promises.map(promise => ???);
resolvedPromises
变量应该容纳两个successPromise
承诺的输出。
我如何实现这样的算法?
答案 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));