wake-up-neo.com

Warten Sie, bis alle verschiedenen Versprechen Nodejs beendet haben (async waitit)

Ich warte derzeit darauf, dass all das Versprechen nacheinander wie folgt endet:

(async() => {
  let profile = await profileHelper.getUserData(username);
   let token = await tokenHelper.getUserToken(username);
   console.log(profile);
   console.log(token);
   return {profile: profile, token: token};
})();

Auf diese Weise werden Profil und Token jedoch nacheinander ausgeführt. Da beide unabhängig voneinander sind, möchte ich, dass beide unabhängig voneinander ausgeführt werden. Ich denke, dass dies mit Promise.all möglich ist, aber ich bin mir der Syntax nicht sicher und konnte auch keine Hilfe finden.

Meine Frage ist also, wie ich über API-Aufrufe konvertieren kann, um zusammen zu laufen und dann die endgültige Ausgabe zurückzugeben.

6
undefined
(async() => {
  const [ profile, token ] = await Promise.all([
    profileHelper.getUserData(username),
    tokenHelper.getUserToken(username)
  ]);

  return { profile, token };
})();
12
Jose Paredes

benutze Promise.all() Methode:

(async() => {
 let [ profile, token ] = await Promise.all(
  [profileHelper.getUserData(username), 
  tokenHelper.getUserToken(username)
 ])
 return {profile: profile, token: token};
})();

Warten Sie, bis alle ES6-Versprechen vollständig sind, sogar abgelehnte Versprechen

10
messerbill

Sie möchten Promise.all verwenden

Die Methode Promise.all (iterable) gibt ein einzelnes Promise zurück, das .__ auflöst. wenn alle Versprechen im iterierbaren Argument gelöst sind oder Wenn das iterable Argument keine Versprechungen enthält. Es lehnt mit der .__ ab. Grund des ersten Versprechens, das ablehnt.

(async() => {
  const response = await Promise.all([
    profileHelper.getUserData(username),
    tokenHelper.getUserToken(username)
  ]);

  return {profile: response[0], token: response[1]};
})();
8
Michal

Die Promise.all-Methode gibt ein einzelnes Promise zurück, das aufgelöst wird, wenn alle Versprechen im Argument aufgelöst wurden oder wenn das Argument keine Versprechen enthält.

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;
})
}
0