[英]Wait for all different promise to finish nodejs (async await)
我目前正在等待所有的承諾像這樣按順序完成:
(async() => {
let profile = await profileHelper.getUserData(username);
let token = await tokenHelper.getUserToken(username);
console.log(profile);
console.log(token);
return {profile: profile, token: token};
})();
但是這樣,配置文件和令牌按順序執行。 由於兩者相互獨立,我希望它們一起獨立執行。 我認為這可以使用 Promise.all 來完成,但我不確定語法,我也找不到任何幫助。
所以我的問題是如何將上述 api 調用轉換為一起運行,然后返回最終輸出。
(async() => {
const [ profile, token ] = await Promise.all([
profileHelper.getUserData(username),
tokenHelper.getUserToken(username)
]);
return { profile, token };
})();
使用Promise.all()
方法:
(async() => {
let [ profile, token ] = await Promise.all(
[profileHelper.getUserData(username),
tokenHelper.getUserToken(username)
])
return {profile: profile, token: token};
})();
你想使用Promise.all
Promise.all(iterable) 方法返回一個 Promise,當 iterable 參數中的所有承諾都已解決或當 iterable 參數不包含任何承諾時,該 Promise 會解決。 它以第一個拒絕的承諾的原因拒絕。
(async() => {
const response = await Promise.all([
profileHelper.getUserData(username),
tokenHelper.getUserToken(username)
]);
return {profile: response[0], token: response[1]};
})();
Promise.all 方法返回一個 Promise,當參數中的所有承諾都已解決或參數不包含承諾時,該 Promise 會解決。
exports.getServerDetails = async (req, res, next) => {
var getCount = [];
const [ onlineUser, countSchool ] = await Promise.all([
getOnlineUsers(), // online user count
getRegisterUser(), // register user
getRegisterSchools(), // register school count
]);
getCount = [
{"Online Users": onlineUser},
{"Registered Users" : countSchool}
];
sendJSONresponse(res, 200, {
status: 'success',
data: getCount
})
}
async function getOnlineUsers() {
return Login.count({'onlineStatus': 1}, (err, count) => {
if (err) {
return err;
}
return count;
});
}
async function getRegisterUser() {
return Login.count({}, (err, totResUser) => {
if (err) {
return err;
}
return totResUser;
})
}
async function getRegisterSchools() {
return Login.count({'role': 'Admin'},(err, totalSchool) => {
if (err) {
return err;
}
return totalSchool;
})
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.