Javascript 等待所有不同的承诺完成nodejs(异步等待)
我目前正在等待所有承诺按如下顺序完成:Javascript 等待所有不同的承诺完成nodejs(异步等待),javascript,node.js,asynchronous,async-await,Javascript,Node.js,Asynchronous,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}; })();
(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调用转换为一起运行,然后返回最终输出。使用Promise.all()
方法:
(async() => {
const [ profile, token ] = await Promise.all([
profileHelper.getUserData(username),
tokenHelper.getUserToken(username)
]);
return { profile, token };
})();
(async() => {
let [ profile, token ] = await Promise.all(
[profileHelper.getUserData(username),
tokenHelper.getUserToken(username)
])
return {profile: profile, token: token};
})();
您想使用
all(iterable)方法返回一个解析的承诺
当iterable争论中的所有承诺都已解决或
当iterable参数不包含承诺时。它拒绝与
拒绝第一个承诺的理由
Promise.all方法返回一个承诺,当参数中的所有承诺都已解决或参数不包含任何承诺时,该承诺将得到解决
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;
})
}
let[profile,token]=wait Promise.all([profileHelper.getUserData(username),tokenHelper.getUserToken(username)])
两个答案几乎同时给出,解释几乎相同。。所以随机选择。两个答案几乎同时出现,解释几乎相同。。所以随机选择。
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;
})
}