javascript - 异步/等待查找文档 ID,然后查找单独的文档集
问题描述
我在我的应用程序中记录了用户“喜欢”的最喜欢的优惠。这些记录包括所有者和商品 ID。我想为特定用户收集前 25 个最喜欢的优惠。所有的 firestore 命令都是异步的,我需要在渲染页面之前收集所有的 offer 对象。
这是我第一次使用 async/await,从一开始就迅速成长为嵌套的 async/await。必须有一种更简单的方法来从 fav 对象中收集 ID,然后使用这些 ID 查找 Offer?
async getItems() {
const collectfavs = async () => {
favsRef = firestore.collection('favs').where('owner','==',getUserID()).orderBy('created', 'desc').limit(25);
let allFavsSnapshot = await favsRef.get();
allFavsSnapshot.forEach(doc => {
let data = doc.data();
favsList.push(data.offer);
});
console.log('favs:',favsList);
}
const collectoffers = async () => {
favsList.forEach(async (fav) => {
let doc = await firestore.collection('offers').doc(fav).get()
console.log('doc:', doc);
let data = doc.data();
data.id = doc.id;
offerList.push(data);
});
console.log('offers:', offerList);
}
await collectfavs();
await collectoffers();
}
解决方案
我不确定你为什么定义两个本地函数只是为了调用它们一次。这似乎比完成工作所需的代码更多。除此之外,你所做的对我来说似乎并不复杂。但是如果你想减少代码行数:
async getItems() {
favsRef = firestore.collection('favs').where('owner','==',getUserID()).orderBy('created', 'desc').limit(25);
let allFavsSnapshot = await favsRef.get();
allFavsSnapshot.forEach(doc => {
let data = doc.data();
favsList.push(data.offer);
});
console.log('favs:',favsList);
favsList.forEach(async (fav) => {
let doc = await firestore.collection('offers').doc(fav).get()
console.log('doc:', doc);
let data = doc.data();
data.id = doc.id;
offerList.push(data);
});
console.log('offers:', offerList);
}
请记住,我不知道你在哪里定义favsList
和offerList
,所以我只是盲目地使用它,就像你展示的那样。
推荐阅读
- unit-testing - 在下面的 2 个存储库的 hadoop 中进行单元测试哪个更好?
- c++ - STL算法处理前N个符合条件的元素
- reactjs - 使用 React 中的 reducer 使用动态构造的对象更新状态
- php - 如何从 jquery 获取 mysql 数据库中的多个字段条目,从 php 获取 html 字段
- android - 如何在 xml 中为此 FAB 提供相等的空格?
- c++ - % 在变量旁边的代码中是什么意思?
- c# - Angular 6 不显示从 Asp Net Web API 2.2 检索到的数据
- python - 为什么 PyYAML/ruamel 在 Python 2 上结合转义代理?
- c# - 如何在 .netcore/Linux 中实现 Diffie Hellman
- tensorflow - C++中的Tensorflow:成功读取LSTM编码器解码器模型的协议缓冲区