我有一个对象数组,每个对象都需要从API调用中获取数据。
每个对象的API端点都不同。
我正在迭代对象数组并为每个对象创建一个Promise。
然后我使用Promise.all传递Promise数组。
一旦Promise解决了,我需要使用它们各自的数据更新原始的对象数组。为了避免两次迭代对象数组,我在Promise解决之前将其then的结果分配给了(为了更好地说)该Promise。
这样做可以工作,但是这种方法是否存在任何问题?
每个对象的API端点都不同。
我正在迭代对象数组并为每个对象创建一个Promise。
然后我使用Promise.all传递Promise数组。
一旦Promise解决了,我需要使用它们各自的数据更新原始的对象数组。为了避免两次迭代对象数组,我在Promise解决之前将其then的结果分配给了(为了更好地说)该Promise。
这样做可以工作,但是这种方法是否存在任何问题?
updateData = async (objects) => {
const promises = [];
objects.forEach(object => {
if (object.data === undefined) {
const service = this.serviceFactory.getService(object.serviceKey);
promises.push(service[object.serviceFunc](object.id).then(data => object.data = data));
}
});
await Promise.all(promises);
};
then
的结果。传递给then
的回调在Promise解决后被调用。除非您想在所有请求完成后执行某些操作,否则不需要Promise.all
。如果在您的情况下需要Promise.all
,那么您可能希望返回Promise.all
的结果而不仅仅是等待它。这将允许调用代码在请求完成后执行某些操作。还要记得处理错误。 - YousafPromise.all(promises)
返回的解决结果,但由于await
的存在,如果service[object.serviceFunc](object.id)
返回的任何 Promise 被拒绝,updateData
将被拒绝。 - t.nieseasync
函数updateData
返回的 Promise 被拒绝了,调用代码需要处理被拒绝的 Promise。 - Yousaf