2016-04-15 2 views
1

In Angular 2, wie kann ich, wenn "n" Anzahl von "beobachtbaren" fertig bestätigen:Wie kann ich die Ausführung aller Observablen in einem Zyklus bestätigen - (Angular 2)?

... 
    for (var i = 1; i <= this.quantity; i++) { 
    description = this.prefix.trim() + ' ' + i.toString(); 
    point = new PointModel(description, 'A', this.locationModel.id); 
    this.point.create(<PointModel>point) 
     .subscribe(
     pointModel => { 
     Materialize.toast('Se ha guardado el punto \"' + pointModel.description + '\"', 2000); 
     }, 
     error => { 
     Materialize.toast('Se ha generado un error: \"' + error + '\"', 2000); 
     } 
    ); 
    } 
    ... 

Thank you!

Antwort

2

Es soll wie folgt sein:

//create and fill points array 
var points:PointModel[] = []; 
for (var i = 1; i <= this.quantity; i++) { 
    description = this.prefix.trim() + ' ' + i.toString(); 
    points.push(new PointModel(description, 'A', this.locationModel.id)); 
} 

Observable.from(points).flatMap(point=>{this.point.create(<PointModel>point)}) 
.subscribe(
    pointModel => { 
    Materialize.toast('Se ha guardado el punto \"' + pointModel.description + '\"', 2000); 
    }, 
    error => { 
    Materialize.toast('Se ha generado un error: \"' + error + '\"', 2000); 
    }, 
() => { 
    Materialize.toast('All points have been created!', 2000); 
    }  
); 
0

Mein letzter Code war:

for (var i = 1; i <= this.quantity; i++) { 
    description = this.prefix.trim() + ' ' + i.toString(); 
    points.push(new PointModel(description, 'A', this.locationModel.id)); 
    } 

    Observable.fromArray(points).flatMap(//'fromArray' is deprecated, instead use 'from' 
    point => { 
     return this.point.create(<PointModel>point); //the return was the key here... 
    } 
) 
    .subscribe(
    pointModel => { 
     Materialize.toast('Se ha guardado el punto \"' + pointModel.description + '\"', 2000); 
    }, 
    error => { 
     Materialize.toast('Se ha generado un error: \"' + error + '\"', 2000); 
    }, 
    () => { 
     this.loadPointsFromModelId(this.pointModel.id); 
    } 
    );