我有一个对象数组,每个对象都需要来自 api 调用的数据。
每个对象的 api 端点都不同。
我正在迭代对象数组并为每个对象创建一个 promise 。
然后我使用 Promise.all 传递一组 promise 。
一旦 promise 得到解决,我需要用它们各自的数据更新原始对象数组。为了防止对象数组迭代两次,我在 Promise 解决之前将 then 的结果赋值(需要一个更好的词)。
它有效,但是这种方法有什么缺陷吗?
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);
};
最佳答案
不,一切都很好,但我鼓励您在整个实现过程中使用 async/await。像这样:
const processObject = async (object) => {
if (object.data === undefined) {
const service = this.serviceFactory.getService(object.serviceKey);
const data = await service[object.serviceFunc](object.id);
object.data = data
}
return object;
}
updateData = async (objects) => {
const promises = objects.map(processObject);
const processedObjects = await Promise.all(promises);
};
关于javascript - Promise.then 在 resolve 之前,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72854413/