触发第二个表单提交点击另一个Observable完成后

时间:2016-05-06 14:02:27

标签: javascript forms angular rxjs observable

以下是我们希望使用的简单程序,并且仅使用RXJS Observables

  1. 点击“登录”按钮(包含用户名和密码的表单)。 Observable.fromEvent与我们的表格绑定。
  2. 提交表单后,调用loginUser(),它向服务器发送http请求并返回Observable。
  3. 如果HTTP请求正在进行中:单击登录按钮不应触发另一个登录请求。
  4. 如果HTTP请求未在进行中:单击登录按钮应触发另一个登录请求。
  5. take(1)takeUntil()takeLast()没有帮助我们。那么,如果我们在500毫秒内单击5次登录按钮并在loginUser()完成后再次使其可用,那么停止登录执行的正确方法是什么?

    这应该仅适用于Observables,唯一的问题是上一句中描述的最后一部分。

    谢谢大家的帮助!

1 个答案:

答案 0 :(得分:2)

您现在可以使用flatMapFirstexhaustMap。它背后的想法是每次点击都会创建一个新的Observable,随后将被展平。当一个正在进行中时,它会默默地丢弃任何新事件。

Observable.fromEvent(submit, 'click')
  .map(() => {}) // Login values
  .exhaustMap(credentials => loginUser(credentials))
  .subscribe(x => console.log("Logged in!"));