2016-08-18 5 views
1

나는 angular2와 @ ngrx/store로 앱을 만들고 있습니다 ... 저는 rxjs를 처음 접하고 반응적인 방식으로 생각합니다 ... 관측 가능성이 얼마나 큰지 고민하고 있습니다. 쇠사슬로 묶여.각도가 2 인 rxjs - 관찰 가능한 스트림을 연결하는 방법

나는 요청이 성공하면 내가하고 싶은 것은 체인이 개 추가 행동입니다 현재

@Effect() authenticate$ = this.updates$ 
.whenAction(AuthActions.AUTHENTICATE_REQUEST) 
.switchMap(update => this.api.post('/authenticate', update.action.payload) 
    .map((res:any) => this.authActions.authenticateSuccess(res.json())) 
    .catch((err:any) => Observable.of(this.authActions.authenticateError(err))) 
); 

처럼 보이는 ... 인증의 효과가 있습니다.

  1. this.router.navigate(['/'])으로 성공한 후 '홈'페이지로 이동하십시오. 하려면 로컬 서비스의
  2. 스토어 자격 증명 this.authService.store(credentials)

내가 스트림에 이러한 작업을 통합하려면 어떻게해야합니까? 마지막 두 문장의 실행 순서는 관련이없는 것으로 가정

+0

authenticateSuccess 액션을 전달 중이므로 다른 효과로 처리해야합니다. 이는 여러 가지 인증 방법이있는 경우 특히 유용합니다. – j2L4e

답변

1

, 당신이 할 필요가

.flatMap(() => 
{ 
    this.router.navigate(['/']); 
    this.authService.store(credentials); 
}); 
+0

고마워 ... 알았어, 그걸 줄거야. .switchMap 이후입니까? 아니면 잡은 후에? – markstewie

+0

.switchMap – hholtij

+0

이후 TypeScript 오류가 발생했습니다 ... ''() => void 유형의 인수를 '(값 : 동작, 인덱스 : 번호) 유형의 매개 변수에 할당 할 수 없음 => 구독 가능 <{}> | 약속 <{}> | ArrayLike <{}> '.' – markstewie

0

최고의 솔루션이처럼 effect을 유지하고 추가하는 것입니다 추가 현재 문장의 끝에 다른 하나는이 같은 성공의 액션에 반응하기 : {dispatch: false} 의미

@Effect({dispatch: false}) authenticateSuccess$ = this.updates$ 
.whenAction(AuthActions.AUTHENTICATE_SUCCESS) 
.do(credentials => { 
    this.router.navigate(['/']); 
    this.authService.store(credentials); 
}); 

는 "이 작업에 반응하지만, 서로를 전송하지 않습니다."

관련 문제