我有一个像这样的数组
let result = [{id:1,name:'test',dealValue:'ds',dealType:2},{id:2,name:'test1',dealValue:'ds',dealType:4}];
我正在循环上述数组以调用另一个函数,这也是每次迭代后的承诺,我需要将该值添加为当前数组中的新项。
let temp = [];
result.forEach((element, index) => {
//build the promise
temp.push(getAmount(element.dealValue, element.dealType));
});
//execute array of promise
let r = await Promise.all(temp);
//add new key value pair
result.forEach((element, index) => {
element.IDGfee = r[index];
});
这很好,但是,我正在运行两个foreach
循环以达到所需的结果,有没有更好的方法呢?
答案 0 :(得分:1)
您可以改用.map
,并在链接到element
调用的.then
内将其分配回getAmount
:
await Promise.all(
result.map((element) => (
getAmount(element.dealValue, element.dealType)
.then((result) => {
element.IDGfee = result;
})
))
);
(尽管,正如注释所指出的那样,这不会在分配给每个element
之前等待每个响应都返回-您的当前代码将在分配给任何请求引发错误之前在分配之前抛出,而这很可能会在之后抛出一些属性已分配给。)