Это, в основном, вопрос с лучшей практикой/подходом RxJs, так как мой код POC работает, но я совершенно новый для RxJs.
Вопрос сводится к .subscribe()
vs .publish().connect()
, так как оба они делают то же самое.
В моем приложении angular2 у меня есть кнопка, которая вызывает функцию для входа пользователя в систему, которая вызывает функцию в моей службе, которая выполняет некоторые действия на стороне сервера и возвращает мне URL-адрес для перенаправления пользователя. Чтобы инициировать запрос, я вызываю .subscribe()
, чтобы заставить наблюдаемое начать создавать значения. Я читал статью "Холодные против горячих наблюдателей", и другой подход заключался бы в вызове .publish().connect()
вместо .subscribe()
. Есть ли какая-либо польза для любого подхода.
<a (click)="logout()">Logout</a>
Функция выхода выглядит следующим образом:
logout.component.ts
logout() { this.authService.logout(); }
И сервис (фактический выход) выглядит следующим образом:
auth.service.ts
logout() : Observable<boolean> {
this.http.get(this.location.prepareExternalUrl('api/v1/authentication/logout'))
.map(this.extractData)
.catch(this.handleError)
.do((x: string) => { window.location.href = x; })
.subscribe(); // Option A -
return Observable.of(true);
}
auth.service.alternative.ts
logout() : Observable<boolean> {
this.http.get(this.location.prepareExternalUrl('api/v1/authentication/logout'))
.map(this.extractData)
.catch(this.handleError)
.do((x: string) => { window.location.href = x; })
.publish() // Option B - Make connectable observable
.connect(); // Option B - Cause the connectable observable to subscribe and produce my value
return Observable.of(true);
}