[英]How to efficiently make multiple api calls from an array in node js
我有以下代码片段可以进行多个 api 调用
var userdetails:any=[]
for(var i=0;i<userids.length;i++)
{
userdetails.push(await this.getUserData(authToken,userid[i]))
}
getUserData function的实现如下
async getUserData(authtoken,userid) {
return new Promise((resolve, reject) => {
const url = `https://***********/***/users?id=userid`;
const requestOptions = {
url,
method: 'GET',
headers: {
'Authorization': authtoken,
}
};
request(requestOptions, (err, response, body) => {
let errorMessage = 'Error in getting data';
if (err) {
return reject(err);
}
if (!response) {
return reject({
message: errorMessage
});
}
if (response.statusCode === 200) {
try {
body = JSON.parse(body);
} catch (err) {
reject({ message: errorMessage });
}
if (isArray(body)) {
let newArray: any = [];
body.forEach(element => {
newArray.push({
userId:element["userId"],
username:element["username"],
});
});
return resolve(newArray);
} else {
return resolve(body);
}
}
if (response.statusCode >= 400) {
return reject({
message: errorMessage
});
}
});
});
}
上面的代码可以正常工作并返回所有数据。 但是其中存在性能故障,并且随着用户ID数量的增加,返回数据需要花费大量时间。 我已经在使用异步等待方法。 我还能如何实现它来调整此代码的性能?
您应该使用Promise.all()或Promise.allSettled()而不是一一等待它们。 它应该使程序更快。
例子:
const requests = [];
for (let i = 0; i < userids.length; i++) {
requests.push(this.getUserData(authToken, userid[i]));
}
const userdetails = await Promise.all(requests);
并尝试使用一些内置 promise 支持的库。 它们将使您的代码更简单、更清晰。 我可以推荐使用axios和node-fetch 。 他们都支持承诺。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.