我正在尝试使用redux-observable在请求中添加取消.尝试实现一个简单的登录示例.目前,添加取消后,我无法再次提交登录请求.
I'm trying to add in canceling in my request using redux-observable. Trying to implement a simple login example. Currently, I am unable to submit the login request again after I added the cancelation.
const loginUserApiCall = (username, password) => { return new Promise((resolve, reject) => { if (username === "foo" && password === "foo") { resolve({ user: { name: "foo", lastName: "fooLName", email: "foo@gmail" } }); } reject({ err: "Creds are incorrect" }); }); }; const loginRequestEpic = (action$, state$) => action$.pipe( ofType(LOGIN_REQUEST), mergeMap(action => { const { username, password } = action.payload; return loginUserApiCall(username, password); }), mergeMap(res => of(loginSuccess(res))), takeUntil(action$.pipe(ofType(LOGIN_CANCELLED))), catchError(err => { return of(loginFailure(err)) }) );我做错了什么,因为取消没有发生,并且取消后我无法重试请求?用户取消后,我应该可以重试.
What am I doing wrong as cancelation is not happening and I can't retry a request after canceling it? Once user cancels I should be able to retry again.
推荐答案一旦执行takeUntil,它将完成您的可观察性,因此当抛出错误并且整个流被停用时,也是如此.您可以在末尾添加repeat运算符
Once takeUntil is executed it'll complete your observable, so is when there are error thrown and the whole stream is deactivated. You can add repeat operator to the end
action$.pipe( ofType(LOGIN_REQUEST), mergeMap(action => { const { username, password } = action.payload; return loginUserApiCall(username, password); }), mergeMap(res => of(loginSuccess(res))), takeUntil(action$.pipe(ofType(LOGIN_CANCELLED))), catchError(err => { return of(loginFailure(err)) }), repeat() );更多推荐
使用Redux Observable取消请求不起作用
发布评论