Использовать случай оператора Observable.do() (rxjs)

Контекст:

Я создаю приложение angular 2 (с API Firebase). Я использую модуль AngularFire. Мне было интересно, как я могу смешивать метод canActivate с AngularFire auth Observable, и я нашел этот пост. Ответ заключается в том, чтобы метод canActivate возвращал значение Observable<boolean>:

canActivate(): Observable<boolean> {
  return this.auth
    .take(1)
    .map((authState: FirebaseAuthState) => !!authState)
    .do(authenticated => {
      if (!authenticated) this.router.navigate(['/login']);
    });
}

Это первый раз, когда я вижу оператор Observable do, и я не могу понять, что он на самом деле делает? Официальный док не помог мне, и я не нашел достойных примеров.

Вопрос:

Может ли кто-нибудь принести сюда несколько примеров использования .do()? И разница с .subscribe()?

Ответы

Ответ 1

.do() - выполнение кода для каждого события. Разница в .map() заключается в том, что возвращаемое значение .do() игнорируется и не изменяет того, какое значение получает абонент.