Rxjs 条件延迟

Rxjs conditional delay

我希望一个可观察对象根据它的值被延迟。例如:

of(someBool).pipe(delay(1000))

someBool 为假时跳过延迟,但当它为真时请稍等。

您可以使用 delayWhen

of(someBool).pipe(
  delayWhen(val => val ? interval(1000) : of(undefined))
)

旁注,根据使用 empty() 而不是 of() 的文档,恕我直言应该可以,但似乎没有。我相信这可能是一个错误。我有 reported it.

例子。假设你正在实现一个登录页面并且你想等到你获得一些令牌将它放入另一个 Observable 或 Cookies 中。然后你可以等待你的 Observable 的值(someBool 这里我使用 this.authService.isLoggedIn)。所以你可以这样做:

return this.authService.isLoggedIn
  .pipe(
    delayWhen(loggedIn => loggedIn ? interval(0) : interval(10000)),
  );

isLoggedIn 的状态改变时,用户将登录。

注意:在未来的版本中,空通知器将不再在输出 observable 上重新发出源值。

someBool$.pipe(
  delayWhen(val => val ? timer(1000) : timer(0))
)