2017-10-15 85 views
0

我想從登錄時的ReplySubject中獲取當前值。在當前流程中訂閱時,將返回先前的值而不是當前值。所以收到的東西是以前的東西在登錄,而不是目前的東西。有沒有辦法在ReplaySubject上獲取訂閱中的observable的當前值,而不必求助於BehaviorSubject?RXJS獲取ReplaySubject的當前值

stuff.service.ts:

private _stuffSubject = new ReplaySubject<any>(); 
private _stuff$: Observable<any> = this._someSubject.asObservable(); 

    get stuff$() { 
    return this._stuff$; 
    } 

    private fetchStuff() { 
    return this.http.get('/stuff/current') 
     .map(data => { 
     return data.json() 
     }) 
     .catch(err => { 
     console.debug(this.constructor.name, 'handled error ->', err.message); 
     return Observable.of(false); 
     }) 
     .map(stuff => { 
     this._stuffSubject.next(stuff); 
     }) 
    } 

stuff.component.ts:

this.stuffService.stuff$ 
    .subscribe(({stuff1, stuff2, stuff3}) => { 
    this.stuff1 = `${stuff1}`; 
    this.stuff2 = `${stuff2}`; 
    this.stuff3 = `${stuff3}`; 
    }); 
+0

你總是可以訂閱'_stuffSubject'來獲取當前的緩衝區,但是你可以無法分辨它何時發射所有物品。 – martin

回答

1

您可以將緩衝區的大小設置爲1:

private _stuffSubject = new ReplaySubject<any>(1); 
+0

'ReplaySubject(1)'就像'BehaviourSubject()',但我認爲它會緩衝第一個並且隨後丟棄(直到訂閱,然後緩衝區能夠接受另一個)? –

+0

嗨@asmmahmud,你是非常正確的緩衝區存儲的最後一個值。 –