이 게시물의 제목이 내 문제를 잘 설명하는지 잘 모르겠지만, 여기에 내 상황이 있습니다.여러 개의 연속 효과가 완료되지 않습니까?
나는 나무가 느슨해 진 아이들이 있습니다. 트리 노드를 확장하면 페이로드로 방금 확장 된 상위 노드가있는 LoadChildrenAction
을 전달합니다. 난 그냥 하나의 노드를 확장하면
@Effect()
loadChildren$: Observable<Action> = this.actions$
.ofType(ActionTypes.LOAD_CHILDREN).switchMap((action: LoadChildrenAction) => {
return this.categoryService.loadChildren(action.payload).map(
children =>
new LoadChildrenSuccessAction({
parent: action.payload,
children
})
);
});
, 이것은 완벽하게 작동합니다 :
여기 내 효과입니다. LoadChildrenSuccessAction
이 전달되고 제 감속원에서 트리를 업데이트합니다.
그러나 노드를 확장 한 다음 첫 번째 작업이 완료되기 전에 다른 노드를 확장하면 마지막 작업 만 완료됩니다.
즉 첫 번째 노드가로드되는 동안 다른 노드를 즉시 확장 한 다음 한 노드를 확장합니다. 두 번째 트리 노드는 하위 컨텐츠로 업데이트되지만 첫 번째 노드는 결코 업데이트되지 않습니다. 실제로 각 확장에 대해 하나씩 LoadChildrenAction
이 전달되지만 하나만LoadChildrenSuccessAction
이 전달됩니다.
내 categoryService.loadChildren
함수 안에 console.log
을 넣으면 두 번 기록되므로 서비스가 두 번 호출됩니다. 그러나 하나의 액션 만 전달되므로 첫 번째 액션을 잃게됩니다. 완료되지 않습니다.
내가 여기 잘못 생각한 이유는 무엇입니까?
[RxJ 시퀀스를 슈퍼 직관적 인 대화 형 다이어그램과 결합하는 방법에 대해 자세히 알아보십시오.] (https://blog.angularindepth.com/learn-to-combine-rxjs-sequences-with-super-intuitive-interactive-diagrams) -20fce8e6511)'switchMap'과'mergeMap'의 차이를 이해하십시오 –