我有像这样的史诗
/**
* 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}`);
}
});
}
注册时,会打印“注册成功”,并按原样记录这两项操作。
为什么以及我做错了什么?
更改数组中的顺序会使另一个值输出。
答案 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();