使用 .filter() 方法配合 promise.all() 可以实现对异步操作结果的过滤。具体做法是:先收集所有 promise,用 promise.all() 等待它们全部完成并返回结果数组,然后调用 .filter() 根据业务逻辑筛选出符合条件的值。

如何过滤掉失败的 Promise
默认情况下,如果任何一个 Promise 被 reject,Promise.all() 会立即失败且不会返回任何结果。要过滤掉失败的 Promise,可以使用 Promise.allSettled() 替代 Promise.all(),它会等待所有 Promise 完成(无论成功或失败),并返回一个包含每个 Promise 状态的对象数组,然后可以进一步过滤出只包含成功结果的项。

const promises = [
Promise.resolve(1),
Promise.reject(new Error('fail')),
Promise.resolve(3)
];
Promise.allSettled(promises).then(results => {
const successResults = results
.filter(result => result.status === 'fulfilled')
.map(result => result.value);
console.log(successResults); // [1, 3]
});
如何基于特定条件过滤异步结果
在获取到所有成功的异步结果后,可以根据具体的业务条件进行过滤。例如,只保留大于某个阈值的数字,或者只保留包含特定字符串的对象。这种过滤是在所有异步操作完成后进行的同步操作,因此不会影响异步流程本身。
立即学习“Java免费学习笔记(深入)”;

const dataPromises = [
Promise.resolve({ id: 1, value: 10 }),
Promise.resolve({ id: 2, value: 5 }),
Promise.resolve({ id: 3, value: 15 })
];
Promise.all(dataPromises).then(dataArray => {
const filteredData = dataArray.filter(item => item.value > 8);
console.log(filteredData); // [{ id: 1, value: 10 }, { id: 3, value: 15 }]
});
如何处理混合了成功和失败 Promise 的复杂场景
当需要同时处理成功和失败的结果,并且只关注成功部分时,Promise.allSettled() 是最合适的选择。它允许你区分哪些 Promise 成功了,哪些失败了,从而可以对成功结果进行过滤和处理,而不会因为单个失败而中断整个流程。


















