对于我的功能执行顺序有一个小问题。
我希望它按照放置的顺序执行,但是由于它们是对Firestore的读取调用,因此它们不同步,因此它们同时执行。
getListData() {
this.acceptedSource();
this.pendingSource();
this.availableSource();
}
// pending is nearly identical to acceptedSource
acceptedSource() {
this.repService.getMyAcceptedRelations(this.mySubcollection).subscribe(result => {
if (result && result.length >= 1) {
this.listData_current = [];
result.forEach(user => {
this.listData_current.push({
//userdata
});
})
this.listData_current = new MatTableDataSource(this.listData_current); // <= important value
} else {
//fallback
}
});
}
availableSource() {
this.repService.getAllCompanyApprenticesOrInstructors().subscribe(result => {
if (result && result.length >= 1) {
this.listData_company = [];
console.log(this.listData_current.data) // undefined because it triggers
console.log(this.listData_pendingVerification.data) // before accepted and pending..
result.forEach(user => {
let counter = 0;
// ... do stuff
这3个函数的功能相似,但出于查询原因,我不想将它们组合为一个。
我想要的是 availableSource()触发最后一个,以便它可以访问在acceptedSource()和endingSource()中定义的MatTableSource.data值,但是由于某些原因,availableSource()总是首先触发。
我尝试使用:
//1.
setTimeout(this.availableSource,1000);
//2.
await Promise.all([this.acceptedSource(), this.pendingSource()]).then(() => {
this.availableSource();
);
//3.
await Promise.all([this.acceptedSource(), this.pendingSource()]);
this.availableSource();
//4.
async function acceptedSource() {}
async function pendingSource() {}
async getListData() {
await this.acceptedSource();
await this.pendingSource();
this.availableSource();
}
//5.
acceptedSource().then(() {
pendingSource().then(() {
availableSource();
})
})
最好的可能性是,如果像nr.3这样的东西并行执行前两个函数,然后在两个函数都完成后再执行第三个函数。