Сначала я попытался получить данные из коллекции лидеров, а затем я попытался получить сведения о пользователях
и добавляю данные в массив победителей, но он работает не так, как я хочу.

  1. порядок в списке победителей неверный
  2. возврат res.send ({WinList: результат}); часть тоже не работает

Как лучше всего это сделать? что я здесь делаю не так? Я новичок в этом, пожалуйста, помогите мне, что я ожидаю, это массив победителей со всеми данными пользователей и правильным порядком.

const leaderboardsCollectionRef = db.collection('leaderboards');
  const usersCollectionRef = db.collection('users');
  const winnerList = [];


  const promise1 = new Promise((resolve, reject) => {
    leaderboardsCollectionRef.orderBy('weeklyPoints', 'desc').limit(13).get().then(async results => {

      results.forEach(async doc => {
        return new Promise((resolve, reject) => {
          const users = usersCollectionRef.where("uid", "==", doc.id).get().then(async snapshot => {

           snapshot.forEach(async doc => {
              winnerList.push({
                [doc.id]: doc.data()
              });
            });
            resolve(winnerList);
          }).catch(err => {
            functions.logger.error('ERR =>', err);
            reject(err);
          });
        });
      });
    }).catch(err => {
      functions.logger.error('ERR =>', err);
      reject(err);
    });

  });

  Promise.all([promise1])
    .then((result) => {
      console.log('result', result)
      return res.send({
        winnerList: result
      });
    }).catch(err => {
      functions.logger.error('ERR =>', err);
    });
1
Dila Lola 22 Мар 2021 в 18:27

1 ответ

Лучший ответ

Предполагая, что вы заключите это в функцию async, я думаю, это сработает:

const leaderboardsRef = db.collection('leaderboards');
const usersCollectionRef = db.collection('users');
const winnerList = [];

const resultsQuery = leaderboardsRef.orderBy('weeklyPoints', 'desc').limit(13);
const resultsSnapshot = await resultsQuery.get();

const uids = [];
resultsSnapshot.forEach(doc => {
    uids.push(doc.id);
});

for (const uid of uids) {
    const userRef = usersCollectionRef.doc(uid);
    const userSnapshot = await userRef.get();
    winnerList.push({ [uid]: userSnapshot.data() });
}

res.send({ winnerList });
0
Stratubas 22 Мар 2021 в 19:46