2017-07-22 12 views
0

Ich versuche, Observables zu bekommen, aber manchmal in nichts verloren gehen.Observables und Antwortdaten Typings

Angenommen wir getData abonnieren json Daten erhalten asynchron:

this.getData(id) 
    .subscribe(res => { 
     console.log(data.items[0]) 
     // more data processing 
    }) 

Dies funktioniert, aber die Verarbeitung Antwortdaten innerhalb .subscribe nicht gefällig aussehen. Zuweisen der Antwort auf eine var scheint ein Weg zu gehen:

let data; 
this.getData(id) 
     .subscribe(res => data = res) 
console.log(data.items[0]) 
// more data processing 

Aber in diesem Fall erhalten wir Fehler, da var ‚data‘ keine Erstprüfung hat.

TypeError: Cannot read property 'items' of undefined

Erstellen einer Schnittstelle für die JSON-Antwort klingt albern. Was vermisse ich?

Auch das Erstellen einer Callback-Funktion scheint überflüssig zu sein, da es zwei Funktionen benötigt, um die Arbeit einer einzigen Funktion auszuführen.

Antwort

0

since var 'data' has no initial type.

No. Der Fehler ist, weil Datenundefined ist. TypeScript ist intelligent genug, um zu sehen, dass data nicht initialisiert wird https://basarat.gitbooks.io/typescript/content/docs/javascript/recap.html. Die Reihenfolge, in der der Code ausführt, ist unten angegeben:

let data; // 1 
this.getData(id) 
     .subscribe(res => data = res) // 3! 
console.log(data.items[0]) // 2 

Mehr

Bitte Nachschlag async Programmierung in JavaScript/Typoskript. Grundsätzlich können Daten nur einmal verwendet werden, wenn subscribe aufgerufen wird.

+0

okay, das verstehe ich. Wie sollte ich es dann strukturieren wo ich die Daten von mehreren Observablen verarbeiten müsste, wenn das sinnvoll ist ..? – iamart

+0

Sie können diese Operationen verwenden: https://github.com/ReactiveX/RxJava/wiki/Combining-Observables basarat

+0

so was ist der Vorteil der Verwendung von Observablen und nicht nur ein Callback mit anonymer Funktion ? 'func (_, {})' – iamart