【发布时间】:2021-06-19 06:40:08
【问题描述】:
首先我尝试从排行榜集合中获取数据,然后我尝试获取用户详细信息
并将数据添加到获胜者列表数组中,但它不能按我的意愿工作。
- 获奖名单顺序不正确
- 返回 res.send({ 获胜者名单:结果 });部分也不起作用
最好的方法是什么?我在这里做错了什么?我对这个有点陌生,请帮助我 我期待的是包含所有用户详细信息和正确顺序的获胜者列表数组。
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);
});
【问题讨论】:
-
你不能使用
await调用forEach,并且你不应该在其他promise 周围使用new Promise -
在您的
users集合中,您是否使用 UID 作为文档 ID? -
是的,我使用 UID 作为文档 ID @Stratubas
标签: javascript node.js firebase async-await promise