2017-12-29 14 views
-1

Ich erstelle eine Reihe von Observablen.Angular 2 beobachtbare Array-Reihenfolge

for (let i = 0; i < userinput.length; ++i) { 
 
     const data = this.transformData(userinput[i]); 
 
     observableBatch.push(this.http.post(this.submitApi, data, requestOptions).map(dataresponnse => dataresponnse.json() ,err => console.error(err)) 
 
      .catch(error => Observable.of(error))); 
 
     } 
 
     return Observable.forkjoin(observableBatch);
Der Code funktioniert .Aber der Reihenfolge der Anordnung in Ordnung ist nicht korrekt .Ich das Ergebnis der letzten http Post erhalten möchten, aber wenn ich drücken (in das Array), um den Index des letzten http-Post ist nicht vorhersehbar. Gibt es eine Möglichkeit, dies zu erreichen?

Antwort

0

denaturiert, das Array, so dass sein wie Sie die Parameter forkJoin eins nach dem anderen vorbei sind:

return Observable.forkJoin(...observableBatch); 

Zum Beispiel entspricht dies:

return Observable.forkJoin(obs1, obs2, obs3, obs4, etc); 

Das abgebildete Wert zurückgegeben sollte ein Array, dessen Ergebnisse in der gleichen Reihenfolge wie sie bestanden wurden:

observable.subscribe(t=> { console.log(t[0]) /*res1*/, 
          console.log(t[1]) /*res2*/, 
          console.log(t[2]) /*res3*/, 
          console.log(t[3]) /*res4*/, 
          etc... }) 
0

I Anstatt Push zu verwenden, können Sie die Unshift-Funktion verwenden. Es wird Ihre letzten HTTP-Post-Anrufdaten im ersten Index hinzufügen. So können Sie leicht den Index Ihres letzten HTTP-Beitrags vorhersagen.

Verwandte Themen