web-dev-qa-db-ja.com

nodejsが完了するすべての異なる約束を待ちます(非同期待ち)

私は現在、次のようにすべての約束が順次完了するのを待っています:

(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呼び出しを一緒に実行するように変換し、最終的な出力を返す方法です。

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

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

Promise.all()メソッドを使用:

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

すべてのES6プロミスが完了するまで、拒否されたプロミスまで待機

10
messerbill

使用したい Promise.all

Promise.all(iterable)メソッドは、反復可能な引数のすべてのプロミスが解決されたとき、または反復可能な引数にプロミスが含まれていないときに解決される単一のPromiseを返します。それは拒否する最初の約束の理由で拒否します。

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

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

Promise.allメソッドは、引数のすべてのプロミスが解決されたとき、または引数にプロミスが含まれていないときに解決される単一の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;
})
}
0