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))
)
我希望一个可观察对象根据它的值被延迟。例如:
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))
)