Эффект просто вызвать один раз с двумя наблюдаемыми в Rxjs 6 - PullRequest
1 голос
/ 16 мая 2019

У меня есть 2 функции для входа в систему: получить соль, затем войти Но когда я отправляю действие Login, оно просто вызывает 1 раз (получаю соль один раз) getSalt и logIn наблюдаются здесь.

Мой эффект написан правильно? Нужна помощь, я новичок в rxjs, спасибо!

Мой эффект

  @Effect()
  logIn$: Observable<any> = this.action$
  .pipe(
    ofType<LogIn>(AuthActionTypes.LOGIN),
    map((action: LogIn) => action.payload),
    switchMap(payload => {
      return this.authService.getSalt(payload.username)
      .pipe(
        map(data => {
          return this.authService.logIn(payload, data);
        })
      );
    })
  );

Соль моя

  public getSalt(username: string): Observable<string> {
    const url = `${host}/customers/${username}/salt`;
    console.log('url salt', url);
    return this._http.get<{ salt: string }>(url)
      .pipe(
        map(res => res.salt)
      );
  }

Мой логин

  public logIn({username, password}: { username: string, password: string }, salt: string) {
    /../
    return this._http.get(url, {params, headers});
  }

Ответы [ 2 ]

0 голосов
/ 16 мая 2019

Вы отображаете на login Observable, поэтому вы должны использовать switchMap вместо map:

switchMap(payload => this.authService.getSalt(payload.username).pipe(
  switchMap(data => this.authService.logIn(payload, data))
))
0 голосов
/ 16 мая 2019

Я думаю, что из-за использования switchMap , поскольку это отменит предыдущий выброс, вы можете изменить его на concatMap или mergeMap

Также, как это работает без отправкидействие в эффекте?Я думаю, что это должно выдать ошибку, если вы не хотите отправлять действие (как возврат) в эффекте, вы можете сделать @Effect({ dispatch: false })

...