2017-02-08 4 views
0

Ich kämpfe immer noch mit den Observablen, weil ich eine komplexe REST API Abfragefunktion mit komplexer Logik und mehreren Anfragen und Antworten kodiere.Wie man auf die Abschlusskette wartet?

ich bereits viele Funktionen mit Abonnement wie diese geschrieben,

function1(){ 
    thisReturnsAnObservable() 
    .subscribe(); 
} 

function2(){ 
    thisReturnsAnObservable() 
    .subscribe(); 
} 

function3(){ 
    thisReturnsAnObservable() 
    .subscribe(); 
} 

Und in der Funktion mit mehreren Abfragen, ich Code wie diese

complexFunction(){ 
    function1(); 
    function2(); 
    function3(); 
    if (aVariableChangedBy123 == true){ 
    doSomething(); 
    } 
} 

Ich glaube, ich bin verwirrt, die Experiment beweist mich falsch, weil die Variable aVariableChangedBy123 immer ausgewertet wird, bevor Funktion1,2,3 endet, also was ich will ist, da die aVariableChangedBy123 nur sicher sein wird, nachdem Funktion1,2,3 nacheinander nacheinander abgeschlossen, wie soll ich code eine Funktion, um diese Funktion zu verketten mit Abonnenten, um sie sequenziell laufen zu lassen?

Ich wusste, es gibt Möglichkeiten wie das Umschreiben aller Funktion 1,2,3, aber gibt es eine Möglichkeit, diese Funktionen nicht zu schreiben, weil ich sie in anderen Situationen wiederverwenden kann?

Ich habe versucht, die flatMap() Funktion zu verwenden, die ich kann sie wie then() wusste Kette, aber der Code immer Fehler zur Laufzeit geben, wie Cannot read property 'flatMap' of undefined, da alle funtion1,2,3 Leere Funktionen sind.

Ich habe einen Weg, aber ich weiß nicht, ob es richtig ist.

wie

Observable.forkJoin(Observable.of(function1),Observable.of(function2)).subscribe() ; 

Ist dieses lebensfähig? Ich dachte nie, ich kann es statisch verwenden ...

+0

prüfen 'flatMap' (jetzt' mergeMap' mit rxjs5) und 'forkJoin' – echonax

+0

sie scheinen nicht für mich arbeiten, manchmal sind sie mir nur [] ungültig geben, ist zu Parameter des Typs SubscribableOrPromise nicht belegbare Fehler –

Antwort

0

Sie sollten map oder switchMap Operatoren verwenden und jede Funktion sollte ein Abonnement zurückgeben, damit es zur nächsten Funktion gehen kann. Auf diese Weise werden Sie nur in Ihrer letzten Methode abonnieren und Ihre Funktion wird in einer Sequenz ausgeführt.

+0

gibt es eine So muss ich diese leeren Funktionen nicht ändern. –

Verwandte Themen