Async reduce returning promises(异步减少退货承诺)

本文介绍了异步减少退货承诺的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个对象数组,我必须为来自和异步函数的每个对象添加一个属性

我正在执行Array.Reduce以迭代每个元素并仅返回一个结果:具有新属性的一个对象数组。

我有这个

const res = await resultOne.reduce(async (users = [], user, i) => {
          let userName;
          try {
            let { name } = await names.getNames(user.id);
            userName = name;
          } catch (error) {
            throw error;
          }
          delete user.id;
          users.push({ ...user, userName });
          return users;
      }, []);

但我收到消息

推流不是用户的功能

这是因为我认为这是一个承诺。

如何在reducemap

中处理异步请求

推荐答案

是的,users是承诺。不要use reduce with async functions。您可以在第一行中执行类似await users的操作,但这将非常低效且单调。

使用普通循环:

const users = [];
for (const user of resultOne) {
    const { name } = await names.getNames(user.id);
    delete user.id;
    users.push({ ...user, userName: user });
}

或者,在您可以同时执行所有操作并创建数组的情况下,map函数与Promise.all

const users = await Promise.all(resultOne.map(async user => {
    const { name } = await names.getNames(user.id);
    delete user.id;
    return { ...user, userName: user };
}));

这篇关于异步减少退货承诺的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!