【发布时间】:2021-06-01 19:30:40
【问题描述】:
我有一个从(Firestore)数据库中获取的用户对象数组,看起来类似于:
let users = [
{ name: 'max', role: 1, company_id: 14 },
{ name: 'steve', role: 3, company_id: 29 },
{ name: 'anna', role: 5, company_id: 124 }
];
有两个表 user_roles 和 companies 我需要从中获取数据,例如各自的角色名称或公司名称。我通过循环 users 数组并使用 observables 从 Firestore 获取数据来实现它。获取的数据将添加到相应的用户,因此我的 users 数组现在包含有关用户公司名称的信息。
for (let user of users) {
// Define all observables
const role_data = firebase.getRoleData(user.role);
const company_data = firebase.getCompanyData(user.company_id);
// Join observables to one stream
const join_stream = combineLatest([role_data, company_data]);
// Subscribe to that joined stream and fetch info
join_stream.subscribe(([role_data, company_data]) => {
user.role_name = role_data['role_name'];
user.company_name = company_data['company_name'];
});
}
有什么方法可以检测for 循环何时完成,以便我可以显示/隐藏加载微调器?我想过实现一个计数器来检查users 数组的长度,但这似乎不是一种优雅的方式。
我不必通过使用 rxjs 或类似的方法来解决,欢迎每个可行的解决方案或提示。也许一些异步的东西?没找到合适的。
提前谢谢你!
【问题讨论】:
-
如果你在
async中调用它的函数,你可以await所有异步操作并显示加载微调器/通知 -
for循环中的哪一部分操作是异步的?如果顺序不重要,您可以简单地将 Promise 推送到数组中,然后执行Promise.all()。
标签: javascript arrays typescript asynchronous google-cloud-firestore