异步减少退货承诺
本教程将介绍异步减少退货承诺的处理方法,这篇教程是从别的地方看到的,然后加了一些国外程序员的疑问与解答,希望能对你有所帮助,好了,下面开始学习吧。
问题描述
我有一个对象数组,我必须为来自和异步函数的每个对象添加一个属性
我正在执行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;
}, []);
但我收到消息
推流不是用户的功能
这是因为我认为这是一个承诺。
怎么在reduce
或map
中处理异步请求
推荐答案
是的,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 };
}));
好了关于异步减少退货承诺的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。