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并等待
承诺不会(默认情况下)为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)
});
}