Bu, temel olarak bir RxJ en iyi uygulama/yaklaşım sorusudur, çünkü POC kodum çalışır, ancak RxJ'lerde yeniyim.RxJS - .subscribe() vs .publish(). Connect()
.subscribe()
vs .publish().connect()
sorusuna benzer, çünkü ikisi de aynı şeyi yapıyor gibi görünüyor.
Angular2 uygulamamda, kullanıcının oturumunu kapatmak için bir işlevi çağıran bir düğmem var; bu, bazı sunucu tarafı eylemlerini gerçekleştiren ve kullanıcının yönlendirmesi için bana bir URL gönderen bir işlevi çağırıyor. İsteği başlatmak için gözlemlenebilir değerlerin üretmeye başlaması için .subscribe()
numaralı telefonu arayın. "Cold vs Hot Observables" ile ilgili bir yazı okuyordum ve başka bir yaklaşım ise .subscribe()
yerine .publish().connect()
'u aramak olurdu. Yaklaşmak için herhangi bir yarar var mı?
<a (click)="logout()">Logout</a>
çıkış fonksiyonu şuna benzer: Böyle
logout.component.ts
logout() { this.authService.logout(); }
Ve hizmet (gerçek çıkış) görünür:
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);
}
Benim durumumda, sadece gözle görülür bir şekilde hemen yürütmeyi istediğim yerde, .subscribe() işlevini hiçbir argüman olmadan çağırmak, muhtemelen bunu gerçekleştirmenin en özlü yolu ve .publish(). connect() 'dir. bunu dolambaçlı bir şekilde gerçekleştirir. – ClaytonK
@ClaytonK Genel olarak evet, çoğu zaman subscribe() 'yeterlidir. – martin
Çıkış siparişi neden değişiyor? Her iki örnekte, 'obs2' nin abone olma ikincisi olduğunu gösteriyor? .share() 'gibi mi? –