javascript - 使用 redux observable 取消请求不起作用

标签 javascript rxjs middleware redux-observable side-effects

我正在尝试使用 redux-observable 在我的请求中添加取消功能。尝试实现一个简单的登录示例。目前,我添加取消后无法再次提交登录请求。

const loginUserApiCall = (username, password) => {
  return new Promise((resolve, reject) => {
    if (username === "foo" && password === "foo") {
      resolve({
        user: { name: "foo", lastName: "fooLName", email: "foo@gmail.com" }
      });
    }
    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))
    })
  );

我做错了什么,因为取消没有发生,并且取消后我无法重试请求?一旦用户取消,我应该能够再次重试。

最佳答案

一旦执行 takeUntil ,它将完成您的可观察,当抛出错误并且整个流被停用时也是如此。您可以在末尾添加repeat运算符

  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()
  );

关于javascript - 使用 redux observable 取消请求不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53508804/

相关文章:

javascript - 尝试在脚本标签上触发 onload 事件

Angular 7 - 收到错误 : 'rxjs has no exported member ' Observable'

javascript - 如何等待 api 的数据加载,然后在 UI 中执行另一个操作?

javascript - 如何使用 Rxjs 实现切换

javascript - Express 中的 next() 接受哪些参数

asp.net-core - 检查是否向 Razor 页面发出请求

放置在外部文件中的 Javascript 文件未执行

javascript - 如何使用正则表达式获取这些图像的 alt 标记 url

amazon-ec2 - Rabbitmq 镜像队列性能

javascript - 如何在鼠标滚动和右键单击上添加事件?