redux-observables mergeMap w /两个输出

时间:2017-06-21 13:37:35

标签: redux-observable

我有像这样的史诗

/**
 * Request a new account from the API
 */
export function signupApiRequest(action$: Observable, store: Store) {
  return action$.ofType(SIGNUP)
    .map(action => [ action, store.getState().accounts.signup ])
    .mergeMap(([ action, signup ]) =>
      sendCommand('/api/accounts/signup', {
          name: signup.name,
          email: signup.email
        })
        .map(response => [ response, signup.email ])
     )
    .mergeMap(([ response, email ]) => {
      switch (response.status) {
        case 409:
          return [existingUser(email)];

        case 201:
          const succ = { type: successOf(SIGNUP) },
                user = mapTokenToUser(response.body.data),
                created = userCreated(user);
          console.log('signup success', [succ, created]);
          return [succ, created];

        default:
          throw new Error(`Unknown response code ${response.code}`);
      }
    });
}

注册时,会打印“注册成功”,并按原样记录这两项操作。

但是,只有第一个动作是从史诗中输出的。 Redux actions for realz

为什么以及我做错了什么?

更改数组中的顺序会使另一个值输出。

1 个答案:

答案 0 :(得分:1)

我们发现这似乎是从5.1.0开始的RxJS本身的错误。你的减速机会抛出一个例外,但它被RxJS无声地吞噬。

https://github.com/redux-observable/redux-observable/issues/263#issuecomment-310180351

它与redux / redux-observable的交互方式有点复杂,但最终没有关联,因为这可以通过以下方式重现:

https://jsbin.com/dukixu/edit?html,js,output

const input$ = new Rx.Subject();

input$
  .mergeMap(() => Rx.Observable.of(1, 2))
  .subscribe(d => {
    throw new Error('some error');
  });

input$.next();