redux-observable Как отправить несколько действий с помощью канала?

Я понял, что

const pingEpic = action$ =>
  action$.ofType('PING')
    .delay(1000) // Asynchronously wait 1000ms then continue
    .mapTo({ type: 'PONG' });

иметь в виду

dispatch({ type: 'PING' });
dispatch({ type: 'PONG' });

Однако я не понимаю, как отправить два действия с помощью канала.

мой код ниже

const signUpEpic = (action$: Observable<Action>) => action$.pipe(
  ofType(actions.GET_DEVICE_TOKEN),
  ofType(actions.SIGN_UP),
  exhaustMap(({ payload }) => request({
    url: 'users',
    method: 'post',
    data: {
      user: {
        email: payload.email,
        password: payload.password,
        device_token: payload.device_token,
        sign_up_with: 'email_and_password',
      },
    },
  }).pipe(
    map(data => camelcaseKeysDeep(data)),
    map(({ user, authToken }) => currentUserActions.successLogin({ user, authToken })),
    catchError((errorMessage: string) => Observable.of(actions.failLogin({ errorMessage }))),
  )),
);

Есть ли у вас какие-либо идеи?

Я тоже пробовал код ниже.

ofType(actions.GET_DEVICE_TOKEN),
mapTo(actions.SIGN_UP),

Благодарность


person sonicmario    schedule 21.02.2018    source источник
comment
Извините, непонятно, о чем вы спрашиваете. Возможно, вы можете упростить код, который вы предоставили, только для самого необходимого и уточнить вопрос?   -  person jayphelps    schedule 08.03.2018


Ответы (1)


Вы можете использовать mergeMap для отправки нескольких действий

.pipe(
  mergeMap(data => [
    camelcaseKeysDeep(data)),
    currentUserActions.successLogin(data.user, data.authToken))
  ],
  catchError((errorMessage: string) => Observable.of(actions.failLogin({ errorMessage }))),
)),
person Linh N.    schedule 15.08.2018