【发布时间】:2021-06-29 01:59:44
【问题描述】:
我有一个 API,它返回一些值并依赖于我想创建一个数组并将该数组传递给解析的值。它在为解析设置超时时起作用,例如,我在 5 秒内设置了5000 sec,它会获取数据、推送数组并解析。但我不想设置超时。请参阅 cmets 以获得更好的理解。它是一个 nodejs 函数。
const calculateTotal = (arr) => {
let clientHotspotsTotal = [];
return new Promise((resolve, reject) => {
arr.forEach((data) => {
axios.get(`enpoint/data?.address`)
.then((response) => {
if (response?.data) {
console.log('API SUCCESS');
const val = (response?.data?.data?.total * data?.percentage) / 100;
clientHotspotsTotal.push({
total: val,
});
} else {
reject('API failed!');
}
})
.catch((error) => {
throw new Error(error);
});
});
resolve(clientHotspotsTotal); /// it return empty [], cause no time set for wait
setTimeout(() => {
resolve(clientHotspotsTotal) // it doesn't return empty because in that time api fetch data
an push into array
}, 5000)
});
};
所以我的问题是,当我为多个用户运行 for 循环时,如何等待多个请求的 API 响应。
【问题讨论】:
-
您正在寻找 Promise.all()。基本上:
let clientHotspotsTotal = await Promise.all(arr.map(data => axios.get(...)));(请注意,您当前的代码似乎没有在任何地方使用数组元素;如果您想将data插入到 URL 中,您必须实际这样做) -
你可以在axios请求的then块中解决promise
标签: javascript node.js async-await promise es6-promise