にrxjs forkjoinコールを変換する助けiがforkJoinを使用して作業していることを呼び出す必要があります。私はngrx Store <から来るアイテムの配列を持っており、各アイテムのhttp呼び出しを行う必要があります)。は私がサービスのセットをリファクタリングしたい(ngrx @Effect内側)非同期呼び出し
forkjoin/wの問題は、それが基本的にブロック操作であるということですので、私はそれを返す前に、すべてのコールが終了するのを待つ必要がある - そしてそれは長いリストである可能性があります。
私は非同期であることを通話にしたい - 各項目のループになるよう、サービスを呼び出し、UIがアイテムを更新しますので、結果を返します。ここで
が私の作業コードで(物事を少し複雑にしているのは、これはngrx @Effect内にラップされた):@Effect()
loadItemValues$: Observable<Action> = this.actions$
.ofType(setActions.LOAD_ITEMS_DATA)
.map(toPayload)
.switchMap(key => {
return this.store.select(fromRoot.getItems)
.flatMap(items => {
let observables = new Array();
for (let i of items) {
observables.push(this.myService.getItemInfo(i, key));
}
return Observable.forkJoin(observables)
.map((res: Grades[]) => {
return new setActions.LoadValuesSuccessAction(res);
})
})
})
私は新しい観測を作成して、再びflatmap使用する必要があることを想定しているが、各アイテムに対してサービスが確実に呼び出されるように、チェーンをどのようにバックアップするかをどのように/どのようにして把握し、その後に結果とともにLoadValuesSuccessAction Reducerを呼び出します。
ご協力いただければ幸いです。
だから、 'LoadValuesSuccessAction'の各、1つずつ放出された値をしたい - その中に単一の値を持つ配列を含む各アクションで? – cartant
@cartant正しいです。成功アクションは状態を(減速機経由で)設定します – user58210