Javascript MatTableDataSource返回约7000行的承诺

Javascript MatTableDataSource返回约7000行的承诺,javascript,angular,promise,angular-material,angular7,Javascript,Angular,Promise,Angular Material,Angular7,我在尝试将大量数据放入mattabledatasource时遇到了一个问题,我希望至少显示一个加载程序,但我不知道数据是何时设置的。我试着用这样的承诺: return new Promise(resolve => { this.infos.map(info => { info.members.map(member => { member.contacts.map(contact => { da

我在尝试将大量数据放入
mattabledatasource
时遇到了一个问题,我希望至少显示一个加载程序,但我不知道数据是何时设置的。我试着用这样的承诺:

return new Promise(resolve => {
    this.infos.map(info => {
        info.members.map(member => {
            member.contacts.map(contact => {
                dataSource.push({
                    contact,
                    member
                });
            });
        });
    });
    this.dataSource = new MatTableDataSource(dataSource);
    resolve();
});

但不起作用,只是我的桌子冷了10秒。如何知道何时完成所有地图+设置数据源?提前发送Thx。

我认为您需要使用async并等待

  • 表已使用async方法获取数据量
  • 数据源已准备好创建表

  • 承诺不会(默认情况下)为JS启用并行编程。像这样长时间运行的代码仍然会阻塞主线程。您可能正在寻找Async/await,但在这里没有帮助。好的,很抱歉。我觉得这是个好主意,不用道歉。这没有帮助,因为async/await是承诺的语法“糖”。从根本上讲,承诺不会阻止长时间运行的代码冻结页面,除非该代码放在web worker或其他页面/资源中。
      async buildTable() {
        this.infos.map(info => {
          info.members.map(member => {
            member.contacts.map(contact => {
              dataSource.push({
                contact,
                member
              });
            });
          });
        });
    
        await Promise.all(dataSource).then((tableData) => {
          this.dataSource = new MatTableDataSource(tableData)
        });
      }