我有一个如下所示的对象数组:
[ { firstName: 'Mike', lastName: 'Jones' },
{ firstName: 'Joe', lastName: 'Smith' },
{ firstName: 'Bob', lastName: 'Johnson' } ]
我需要将该数组传递给一个函数,该函数将向每个对象添加一个“middleName”字段以及 middleName 的值。该函数通过在 Node 中发出异步 http.get 请求来获取中间名。问题就在这里。无论我如何尝试,我都无法完成这项工作。
之前有人建议了这样的循环:
array.forEach(function (obj) {
GetMiddleName(obj, function (person) {
obj.MiddleName = person;
});
});
但是由于在 GetMiddleName 函数中调用 get 的异步性质,这不起作用。 谁能告诉我一个简短的函数来满足我的需要?
最佳答案
创建一个 Promise 数组,在该数组上调用 Promise.all
,然后向每个 Promise 插入中间名:
const getMiddleNameProm = obj => new Promise((resolve) => {
GetMiddleName(obj, resolve);
});
Promise.all(arr.map(getMiddleNameProm))
.then((middleNames) => {
for (let i = 0; i < middleNames.length; i++) {
arr[i].MiddleName = middleNames[i];
}
// do stuff with populated arr here
});
});
关于Javascript异步获取循环内的请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59786513/