我正在等待所有承诺按顺序完成:
(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调用转换为一起运行,然后返回最终输出。
答案 0 :(得分:13)
(async() => {
const [ profile, token ] = await Promise.all([
profileHelper.getUserData(username),
tokenHelper.getUserToken(username)
]);
return { profile, token };
})();
答案 1 :(得分:10)
使用Promise.all()
方法:
(async() => {
let [ profile, token ] = await Promise.all(
[profileHelper.getUserData(username),
tokenHelper.getUserToken(username)
])
return {profile: profile, token: token};
})();
Wait until all ES6 promises complete, even rejected promises
答案 2 :(得分:8)
您想使用Promise.all
Promise.all(iterable)方法返回一个解析的Promise 当iterable参数中的所有promise都已解决或 当iterable参数不包含promise时。它拒绝了 拒绝的第一个承诺的原因。
(async() => {
const response = await Promise.all([
profileHelper.getUserData(username),
tokenHelper.getUserToken(username)
]);
return {profile: response[0], token: response[1]};
})();
答案 3 :(得分:0)
Promise.all方法返回一个Promise,当参数中的所有promise已解决或参数中不包含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;
})
}