在JavaScript/TypeScript中使循环有点异步/等待

在JavaScript/TypeScript中使循环有点异步/等待,javascript,arrays,typescript,asynchronous,google-cloud-firestore,Javascript,Arrays,Typescript,Asynchronous,Google Cloud Firestore,我有一个从(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\u roles和companys,我需要从中获取相应的角色名称或公司名称等数据。我通过在用户数组中循环

我有一个从(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\u roles
companys
,我需要从中获取相应的角色名称或公司名称等数据。我通过在
用户
数组中循环,并使用可观察对象从Firestore获取数据来实现它。提取的数据被添加到相应的用户中,因此my
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'];
  });

}
是否有任何方法可以检测何时完成的
循环,以便显示/隐藏加载微调器?我曾想过实现一个计数器来检查
用户
数组的长度,但这似乎不是一个优雅的方法

我不必使用rxjs或类似的工具来解决这个问题,任何可行的解决方案或提示都是受欢迎的。也许是一些异步的东西?我还没有找到合适的


提前谢谢你

希望我理解正确。这就是你要找的吗

让用户=[
{name:'max',角色:1,公司id:14},
{姓名:'steve',角色:3,公司id:29},
{姓名:'anna',角色:5,公司id:124}
];
for(让[i,user]的users.entries(){
//定义所有可见项
// ...
//将可观察对象连接到一个流
// ...
//订阅加入的流并获取信息
// ...
if(i+1==users.length){
console.log('Finished!');
}
}

让我知道它是否有效如果您在
异步
中调用函数,您可以
等待
所有异步操作并显示加载微调器/注意
for
循环中的操作的哪一部分是异步的?如果顺序不重要,您可以简单地将承诺推入一个数组,然后执行
Promise.all()
。是的,这是我所说的相反的事情。但我想知道是否有一些异步/等待技术或类似的技术来防止计数。无论如何,感谢+1提供了一个有效的解决方案!如上所述,您可以使用
Promise.all()创建一个解决方案,但我想不出任何其他解决方案比对照数组长度检查索引更优雅。很高兴我能不顾一切地表达我的想法!