J'attends actuellement toutes les promesses pour terminer séquentiellement comme ceci:
(async() => {
let profile = await profileHelper.getUserData(username);
let token = await tokenHelper.getUserToken(username);
console.log(profile);
console.log(token);
return {profile: profile, token: token};
})();
Mais de cette façon, le profil et le jeton s'exécutent de manière séquentielle. Puisque les deux sont indépendants l'un de l'autre, je veux que les deux soient exécutés indépendamment ensemble. Je pense que cela peut être fait en utilisant Promise.all, mais je ne suis pas sûr de la syntaxe et je ne pouvais pas trouver d'aide non plus.
Ma question est donc de savoir comment je peux convertir les appels API ci-dessus pour qu'ils fonctionnent ensemble, puis renvoyer la sortie finale.
(async() => {
const [ profile, token ] = await Promise.all([
profileHelper.getUserData(username),
tokenHelper.getUserToken(username)
]);
return { profile, token };
})();
utilisez la méthode Promise.all()
:
(async() => {
let [ profile, token ] = await Promise.all(
[profileHelper.getUserData(username),
tokenHelper.getUserToken(username)
])
return {profile: profile, token: token};
})();
Attendez que toutes les promesses de l'ES6 soient complètes, voire rejetées
Vous voulez utiliser Promise.all
La méthode Promise.all (iterable) renvoie une seule promesse qui résout lorsque toutes les promesses de l'argument itérable ont été résolues ou lorsque l'argument itérable ne contient aucune promesse. Il rejette avec le raison de la première promesse qui rejette.
(async() => {
const response = await Promise.all([
profileHelper.getUserData(username),
tokenHelper.getUserToken(username)
]);
return {profile: response[0], token: response[1]};
})();
La méthode Promise.all renvoie une seule promesse qui est résolue lorsque toutes les promesses de l'argument sont résolues ou lorsque l'argument ne contient aucune promesse.
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;
})
}