Я новичок в rxjs - вроде как понимаю большинство операторов, но не понимаю, как конкретно использовать BehaviorSubject
, filter
и take
.
Я хочу обновить пару oauth-доступа и обновить токен в угловом перехватчике. Весь код, который я видел здесь и в блогах, одинаков - кажется, есть стандартный способ сделать это. Но есть один момент, который я не понимаю.
Как пример , эта часть ставит запросы в очередь до тех пор, пока не станут доступны новые маркеры доступа и обновления.
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
вызывает ожидание - где / как происходит ожидание и организация очереди?