javascript - 过滤包含已解决 Promise 的对象数组
问题描述
我在这样的数组中有一堆对象:
let orders = [];
orders.push({
name: 'name1',
promise: promiseFunction(1),
description: 'description1'
});
orders.push({
name: 'name2',
promise: promiseFunction(2),
description: 'description2'
});
我之前等待每个 Promise 解决:
await Promise.allSettled(orders.map(order => order.promise));
效果很好。
但现在我想要一个数组,其中包含所有orders
已解决的 Promise。我将如何过滤这个?伪代码我想到了这样的事情:
let successfullMainOrders = orders.filter(order => order.promise == 'resolved');
有没有好的方法来做到这一点?
提前致谢!
编辑:
添加一些上下文:我正在尝试尽快发送多个 REST 请求。这是通过使用请求结果解析或拒绝的函数来完成的。(promisefunction()
)因为我想尽可能快地提出这些请求,所以我的想法是首先将它们收集在一个数组中orders
,其中包含一些附加信息以供以后识别name
,description
并且在每个请求被解决/拒绝之后await Promise.allSettled(orders.map(order => order.promise));
我想做仅使用来自成功请求的信息的进一步操作。
解决方案
您现有的代码将不起作用,因为orders
它是一个对象,而不是一个数组。你不能.push
对一个对象。
要等待所有解析值并获得一个数组作为结果,该数组除了对象的其他部分之外还包含这些值,请.then
在每个 Promise 之后放置一个以解析为数组中的一个对象,例如:
const orders = await Promise.all([
promiseFunction(1).then(val => ({ name: 'name1', val, description: 'description1' })),
promiseFunction(2).then(val => ({ name: 'name2', val, description: 'description2' })),
]);
如果您能够概括您的代码以使用名称、描述和promiseFunction
参数的数组来调用,您可以减少它的重复性,也许像
const initialOrders = [
{ name: 'name1', arg: 1, description: 'description1' },
{ name: 'name2', arg: 2, description: 'description2' },
];
const orders = await Promise.all(
initialOrders.map(
({ arg, ...rest }) => promiseFunction(arg).then(
val => ({ ...rest, val })
)
)
);
推荐阅读
- go - 如何在查询中使用 Firestore DocumentID __name__
- r - 是否有一种一次性的方法可以在 r 中将 print()/cut() 替换为 message()/warning()
- php - ErrorException htmlspecialchars() 期望参数 1 是字符串,给定对象 ()
- python-3.x - python3 - 如何简化多个 if/else 语句
- python - 使用 Keras 对多个独立序列进行二进制分类
- c++ - 如何在函数式编程中编写缓冲区
- arrays - 比较两个不相等条目的列表并获取包含匹配元素的行 tcl
- opencl - OpenCL 在运行时从 Host 函数创建内核
- docker - 在 GitLab CI 中使用 BuildKit 和挂载的`/var/run/docker.sock`
- apache-spark - 带有scala的spark中数据框列内的列名