异步减少退货承诺

本教程将介绍异步减少退货承诺的处理方法,这篇教程是从别的地方看到的,然后加了一些国外程序员的疑问与解答,希望能对你有所帮助,好了,下面开始学习吧。

异步减少退货承诺 教程 第1张

问题描述

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

我正在执行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 };
}));

好了关于异步减少退货承诺的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。