대화 상자를 열면 대화 상자 내의 양식 컨트롤에 대한 데이터를 미리로드하는 작업을 전달합니다. 작업은 원래 작업에 전달 된 배열의 각 id
에 대한 데이터를 미리로드하는 새로운 작업 배열을 반환하는 효과에 의해 선택됩니다. 이것이 내가 동일한 유형의 여러 작업을 파견하고있어 처음 비록mergeMap은 이전 HTTP 호출을 취소합니다.
@Effect()
preloadReferenceData$ = this.actions$
.ofType(PRELOAD_REFDATA)
.pipe(
map((action: PreloadRefData) => action.payload),
mergeMap(ids => {
const actions: Action[] = [];
ids.forEach((id) => actions.push(new LoadRefDataForId(id)));
return actions;
})
);
일반적으로, 나는 성공적으로 효과에서 여러 새로운 작업을 파견하는 mergeMap
연산자를 사용, 그것은 내가 경험 한 처음 XHR 통화가 취소된다는 것입니다. XHR 통화가 취소 된 경우 switchMap
의 사용을 의심했지만, 지금은 mergeMap
을 사용할 때가 아닙니다.
이
은actions
LoadRefDataForId {payload: "2441", type: "[Refdata] Load RefData"}
LoadRefDataForId {payload: "7612", type: "[Refdata] Load RefData"}
LoadRefDataForId {payload: "9411", type: "[Refdata] Load RefData"}
의 내용이며,이 네트워크 로그
@Effect()
loadRefDataForId$ = this.actions$
.ofType(LOAD_REFDATA_FOR_ID)
.pipe(
map((action: LoadRefDataForId) => action.payload),
switchMap((id) => this.service.loadRefData(id)
.pipe(
map((occupations) => {
return new LoadRefDataForIdSuccessful({ id: id, occupations: occupations } as RefDataPayload);
}),
catchError((err, caught) => {
console.log(caught);
return caught;
})
))
);
왜있는 LoadRefDataForId
조치를 처리하는 효과에서 가져옵니다 티 그는 XHR을 취소했는데, 내가 mergeMap
을 사용하고 있어도?
당신이 LoadRefDataForId 작업을 처리 효과에 대한 코드를 추가 할 수 있습니다에
는변경 그것? 이 중 하나는 어떤 종류의 요청을 담당하지 않습니다. –
코드 @ Jota.Toledo가 추가되었습니다! 나는 switchMap을 mergeMap으로 변경하여 모든 것을 작동 시키려고 노력했지만 왜 그랬는지는 모르겠습니다. 병합 된 세 개의 분리 관측치가 없으며, 이들 중 어느 하나에서'switchMap'을 사용하면 해당 특정 스트림에만 효과가 발생해야합니까? –
그리고 왜 닫기 플래그? 예, 그것은 왜이 코드가 작동하지 않습니까? - 유형의 질문입니다. 그러나 중요한 차이점은 그것이 어떻게 작동해야하고 왜, 그리고 결국 추론 질문을 가지고 논쟁한다는 것입니다. –