[英]How do you combine RxJs and NgRx to make multiple Rest-Calls and make them wait for a result?
在我的 Effect 中,我正在監聽一個 Action,該 Action 的值是一個字符串數組。 現在我需要遍歷數組並將這些值用作下一個 asnyc function 的輸入。
someEffect$ = createEffect(() =>
this.action$.pipe(
ofType(someAction),
mergeMap(({ someValue }) =>
this.httpCall.getSomeTh(someValue[0]).pipe(
map((result) => someOtherAction)
)
)
)
)
我嘗試了一些不同的東西。 下面的那個似乎讓我找到了我想要的最接近的那個。 但是由於 Rest-calls 需要一段時間才能返回,所以數組總是空的。
someEffect$ = createEffect(() =>
this.action$.pipe(
ofType(someAction),
mergeMap(({ someValue }) => {
const array = [];
someValue.forEach((value) =>
this.http.get(value).pipe(tap((object) => array.push(object)))
)
return of(someOtherAction(array))
}
)
)
)
有誰知道如何讓整個事情等待 rest 電話返回?
使用forkJoin
。
someEffect$ = createEffect(() =>
this.action$.pipe(
ofType(someAction),
mergeMap(({ someValue }) =>
forkJoin(someValue.map(value => this.http.get(value)))
)
)
)
forkJoin
接受一個 Obserables 數組,並在每個 Observable 完成時發出。 它將結果輸出為數組。
您只需在完成第一個調用 (someValue.forEach) 后繼續編寫下一個調用。
長期的情況是:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.