2017-07-12 4 views
0

Ich habe eine einfache Funktion, enthalten in einem Service, eine beobachtbare eines Objekts Rückkehr:Wie trösten Sie Protokolldaten von beobachtbaren Abonnements?

private someData; 

getDataStream(): Observable<any> { 
    return Observable.of(this.someData); 
    } 

Ich abonniere diese Funktion onInit einer Komponente:

private somethingsomething; 

    ngOnInit() { 
    this.dataService.getDataStream().subscribe(
     (data) => { 
     this.somethingsomething = data; // WORKS AND ALWAYS UP TO DATE 
     console.log(data); // ONLY WORKS ONCE 
     } 
    ) 
    } 

Wie kommentierte die Daten, wenn Eine Variable, die dann in der Ansicht angezeigt wird, ist immer in Ordnung. Aber die console.log auf der anderen Seite wird nur einmal und dann nie wieder ausgelöst.

Wie kann ich die Daten bei jeder Änderung console.log?

+0

hängt davon ab, wie Sie es in der Ansicht verwenden. Können Sie dazu einige Informationen geben? – Nehal

Antwort

0

Der Grund this.somethingsomething ändert sich, dass es die Referenz someData hat. getDataStream Methode wird nur einmal ausgeführt. Da sich das Objekt jedoch ändert, ändert sich auch das Feld mit der Referenz somethingsomething s. Dies liegt daran, Object s sind veränderbar in Javascript.

Wenn getDataStream eine Antwort von einem Server zurückgab, wäre das nicht der Fall.

+0

Ich sehe, also ist meine ganze Anmeldung nutzlos. Irgendein Hinweis, wie man es richtig macht? :) –

+0

@JakobFischer Nun, das ist wirklich breit, aber das kann nur passieren, wenn Sie eine Zuweisung zum Objekt machen. Wo machst du die Aufgaben? Sie können vielleicht ein Publish/Subscribe-Muster verwenden. Das heißt, nur das Objekt von einer Methode ändern und wann immer diese Methode verwendet wird, können Sie es protokollieren. – echonax

0

Um diese Daten auf der Konsole zu protokollieren, verwenden Sie am besten den Operator do. Jedes Mal, wenn ein neuer Wert von getDataStream Observable geschoben wird, wird der Operator do console.log diese Daten.

private somethingsomething; 

    ngOnInit() { 
    this.dataService.getDataStream() 
     .do(data => console.log(data)) 
     .subscribe((data) => { 
     this.somethingsomething = data; 
     } 
    ) 
    } 
Verwandte Themen