javascript - Promise.then 在 resolve 之前

标签 javascript es6-promise

我有一个对象数组,每个对象都需要来自 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/

相关文章:

javascript - AJAX/ Spring MVC : JSON Object rendering in bracket notation in POST request

javascript - JavaScript 中的范围式迭代器

javascript - 为什么异步函数中的setTimeout需要再次包装在新的Promise中?

javascript - 查询 : trigger a click on an Ajax generated HTML's

javascript - React - 未捕获的类型错误 : Cannot read property 'indexOf' of undefined

javascript - 当 DIV 悬停时文本框失去焦点

javascript - Remove 实际上是在 Promise 解决后删除一个 div

javascript - "return Promise.resolve()"如何影响 JavaScript 事件循环?

javascript - javascript中resolve、reject是关键字吗?

javascript - 递归 promise 会遭受内存泄漏吗?