我有我的火力執行多個異步操作(打字稿)
- ActionSheet
- PendingApproval
- SomeKey1
- user: 1
- data: 'walk the dog'
- SomeKey2
- user: 2
- data: 'brush the cat'
- Approved
- SomeKey3
- user: 1
- data: 'feed fish'
我要下載此結構中,從用戶1中的所有數據,例如,下面的數據結構,我可以顯示給用戶'走路的狗'和'餵魚'
目前這是我如何做到這一點。我正在「鏈接」這些電話,以便第二個電話在第一個電話結束前不會開始。
ngOnInit() {
this.databaseService.searchCurrentUserPendingApproval()
.first()
.subscribe(results => {
for (let result of results) {
this.mySubmissions.push(result);
}
this.databaseService.searchCurrentUserApprovedAction()
.first()
.subscribe(results => {
for (let result of results) {
this.mySubmissions.push(result);
}
// do some logic to the this.mySubmissio array at this point
doSomething(this.mySubmission);
}, error => {
console.log('Error download Actioned Timesheet', error)
})
}, error => {
console.log('error retreiving pending submission from firebase', error)
})
}
searchCurrentUserPendingTimesheets(key: string) {
let path = '/ActionSheet/PendingApproval' + key;
return this.af.database.list(path, {
query: {
orderByChild: 'user',
equalTo: 1
}
})
}
// search for own timesheet in firebase
searchCurrentUserActionedTimesheets(key: string) {
let path = '/ActionSheet/Approved' + key;
return this.af.database.list(path, {
query: {
orderByChild: 'user',
equalTo: 1
}
})
}
This works。然而,最大的問題在於,這是一種可怕的方式,對於較大的「連鎖」來說,速度會很慢。 由於兩個查詢並不相互依賴,所以更好的方法是同時查詢兩個分支,並在兩個操作完成時得到通知(無論哪個先返回爲我將在最後對數組進行排序')。
換句話說,一旦完成所有提到的異步調用,我想運行doSomething(this.mySubmission)。有沒有適當的打字方式來達到這個目的?
注意。當我使用Swift時,我可以通過dispath_group_enter/dispatch_group_leave實現這一點。
什麼'Promise.all()'?這不是打字稿特定的,但你提到的是它的確切用例 – aarosil