2016-10-27 1 views
1

in Winkel 1 konnte ich Nest einige http-Anrufe und reagieren auf ihr Ergebnis wie folgt aus:Winkel 2 Pyramide des Schicksals zu vermeiden http ruft

this.$qSessionPromise 
.then(() => { 
    return this.Init(); 
}) 
.then(() => { 
    return this.Services.GetData1("id1"); 
}) 
.then((data: model.DataType1) => { 
    this.data = data; 
}) 
.then(() => { 
    this.SetIsInitialized(true); 
    this.handler = new MyHandler(this.data); 
    this.RegisterEvents(); 
}); 

aber in Winkel 2 konnte ich nicht einen Weg finden, keine Möglichkeit zur Anzeige zu tun, etwas ähnliches ...

, wenn ich die subscribe-Methode gibt Nutzung ist eine weitere subscribe-Methode ...

this.service.GetData1() 
    .subscribe(data:model.DataType1 => { 
     this.data = data; 
    return this.Services.GetData2("id2"); 
    }) 
.subscribe(data:model.DataType2 => { 
     this.data = data; 
    }) 

ist es eine Möglichkeit, dies zu umgehen?

Antwort

2

Verwenden Sie einfach .mergeMap() statt .subscribe() (außer dem letzten, weil ohne .subscribe() keinen HTTP-Aufruf wird

this.service.GetData1() 
    .mergeMap(data:model.DataType1 => { 
     this.data = data; 
     return this.Services.GetData2("id2"); 
    }) 
    .subscribe(data:model.DataType2 => { 
     this.data = data; 
    }) 
+2

'.flatMap()' gemacht werden (Back-to-Back-Rest nennt) und '. Auch die Operatoren forkJoin() '(' Promise.all') sind nützlich. Ich möchte nur erwähnen :) – echonax

+1

'.flatMap()' ist nur ein Alias ​​für 'mergeMap()' https://github.com/ReactiveX/ rxjs/blob/master/MIGRATION.md –

+0

@ Günter genau das, was ich gesucht habe ... danke! –

Verwandte Themen