2016-11-11 1 views
0

기능을 수행합니다각도이 효과는 내가이 효과를 가지고

@Effect() createModel$: Observable<Action> = this.actions$ 
    .ofType(CREATE_MODEL_REQUEST) 
    .switchMap(action => this.modelsApi.createModel(action.payload) 
    .do(() => ({type: CREATE_MODEL_SUCCESS})) 
    .map(() => ({type: GET_MODELS_REQUEST})) 
    .catch((err: any) => Observable.of({type: REQUEST_FAILURE, payload: err}))); 

을 그리고 요청이 성공적인 경우 activeRequests 카운터를 감소 내 http 감속기에 성공 조치를 파견하기 위해 노력하고있어. 그리고 .map은 API에서 새 모델 목록을 가져 오는 새로운 get 요청을 트리거해야합니다.

내가하는 일과 상관없이 내가 시도하는 것처럼 보이더라도 CREATE_MODEL_SUCCESSGET_MODELS_REQUEST을 모두 실행할 수 없다는 것이 문제입니다.

createModel 함수의 초기 호출이 성공적 일 경우 두 함수가 모두 실행되는지 어떻게 확인할 수 있습니까?

편집 : 그것은 실제로 내가 console.log(true)로 교체하는 경우 때문에 나는 그것이 실행되는 것을 볼 수 있습니다 실행되는 .do처럼 보이지 않지만,이 ({type: CREATE_MODEL_SUCCESS})를 전달하지 않습니다.

답변

2

귀하의 do 기능은 아무것도하지 않습니다

.do(() => ({type: CREATE_MODEL_SUCCESS})) 

그것은 값을 반환하려고 시도하지만 반환 값은 무시됩니다 - 그래서 아무 일도 발생하지 않습니다. do 연산자를 사용하여 관찰 대상에서 다른 값을 방출 할 수 없습니다.

console.log 전화를 do에 넣으면 콘솔에 쓰는 것을 볼 수 있습니다.

@Effect() createModel$: Observable<Action> = this.actions$ 
    .ofType(CREATE_MODEL_REQUEST) 
    .switchMap(action => this.modelsApi.createModel(action.payload)) 
    .concatMap(() => Observable.from([ 
    { type: CREATE_MODEL_SUCCESS }, 
    { type: GET_MODELS_REQUEST } 
    ])) 
    .catch((err: any) => Observable.of({ type: REQUEST_FAILURE, payload: err })); 
+0

그래서 해결책은 ... 무엇입니까 : 여러 조치를 방출하려면

, 당신은 이런 식으로 뭔가를 사용할 수 있습니까? – Chrillewoodz

+0

니스, 작동합니다. 무슨 일이 일어나는지 깊이 더 설명해 주시겠습니까? rxjs 방법을 이해하기는 너무 힘들지만 괜찮은 설명을 찾기는 힘듭니다. – Chrillewoodz

+0

'switchMap'은 소스 observable에서 나오는 것을 스위치 한 observable에서 나오는 것으로 바꾼다. 그리고 반환 된 observable은 두 개의 액션을 내 보낸다. - Observable.from은 배열에서 하나씩 전달되는 값을 방출한다. 그런 다음 액션이 효과에서 흘러 나와 상점 등으로 알려집니다. – cartant