【发布时间】:2019-06-26 21:51:49
【问题描述】:
我是 rxjs 的新手 - 我了解大多数运算符,但我不了解 BehaviorSubject、filter 和 take 的特定用法。
我想在 Angular 拦截器中更新 oauth 访问和刷新令牌对。我在这里和博客中看到的所有代码都是相同的——似乎有一种标准的方法来做到这一点。但是有一点我不明白。
作为an example,这部分将请求排队,直到有新的访问和刷新令牌可用。
private refreshSubject = new BehaviorSubject<any>(null);
// ...etc.
if (!this.refreshInProgress) {
// request new access and refresh tokens from server
// populate refreshSubject once tokens received
}
else {
return this.refreshSubject.pipe(
filter(result => result !== null), // <---- ???
take(1), // <---- ???
switchMap(() => next.handle(this.addToken(request)))
);
}
所有此类示例都说明请求会排队,直到refreshSubject 被新令牌填充,而魔法发生在filter。
这是我不明白的。 rxjs docs 不是说 filter 导致等待 - 等待和排队在哪里/如何发生?
【问题讨论】:
标签: angular typescript rxjs