Ich versuche, die Verwendung von Observablen zu verstehen,Winkel 2 beobachtbaren nächstes
alles ist in den einfachen Fällen in Ordnung, aber in einem Fall mag ich mehrere Bilder komprimieren.
Ich verwende ng2-img-tools
Methode ein Bild zu komprimieren. Dies reduziert die Qualität eines Bildes unter , bis es zu einer bestimmten Dateigröße passt, die als maxSizeInMB angegeben wird. Setzen Sie ignoreAlpha auf true, wenn Sie den Alphakanal für png Bilder ignorieren und trotzdem komprimieren möchten (nicht empfohlen - der Alpha-Kanal geht verloren und das resultierende Bild weicht möglicherweise vom Originalbild ab). Gibt eine Observable zurück, dass für jede Datei onNext entweder eine Datei empfängt, wenn alles wie geplant abgelaufen ist, oder ein Fehlerobjekt, wenn etwas schief gelaufen ist.
In meinem Code, ich tue das folgende:
compressImages(filesToUpload:File[]):Observable<any> {
if (filesToUpload && filesToUpload.length > 0) {
return this.ng2ImgToolsService.compress(filesToUpload,GlobalService.MAX_FILE_SIZE_MB).map(response => {
console.log("response is");
console.log(response)
return response;
});
}
return Observable.of("no_image").map(response => "no_image");
}
this.imageService.compressImages(filesToUpload).flatMap(result => {
console.log(result)
return this.http.post(...);
}
).catch(UtilsService.handleError);
das Problem Ergebnis gibt nur 1 Datei ist, weiß ich, ich result.next()
irgendwo verwenden sollte, aber ich habe keine Ahnung, wie.
Vielen Dank für die Antwort, aber wie "schlinge ich" alle nächsten() Werte? –
@DanyY schleift es nicht schon für dich? Subscribe wendet die Lambda-Funktion an, sobald etwas in den Stream eintritt, so dass die übergebene Funktion für jedes onNext-Element angewendet wird. –
Thank you !! Jetzt fangen die Dinge endlich an, Sinn zu ergeben. In meinem Fall passiert das nicht, denn wenn ich ein Ergebnis erhalte, poste ich direkt auf dem Server. Aber in einem separaten Test funktioniert es genau wie du gesagt hast. Gibt es eine Möglichkeit zu warten, bis alle fertig sind, um sie auf dem Server zu posten? –