私は写真をアップロードするためのサービスを持っています。画像をアップロードするには、私が行うのは角2:複数のhttp呼び出しを1つにマージする
return this.http.post(/* ... */)
です。私は自分のコンポーネントで購読することができます。私はいくつかの写真をアップロードしたい場合でも、私は
for (let p of pics) { this.http.post(/* ... */); }
私の問題は、私はすべての結果を返したいということであるしなければならないだけではなく、1つのコールの呼び出します。それは可能ですか?
const observables = pics.map(p => this.http.post(/* ... */));
Observable.forkJoin(observables)
.subscribe(results => ...);
あなたは最終的には彼らのように結果を受け取るためObservable.merge()
を使用することができます。あなたはforkJoin()
を使用することができます並行してすべての要求を実行したい場合は
EDITは、ここに私のサービス
addPictures(files: File[], folder: string): Observable<Parse.Object[]> {
let hasError = false;
for (let file of files) {
let [type, ext] = file.type.split('/');
if (type.toLowerCase() !== 'image' || !environment.imgExts.includes(ext.toLowerCase())) { hasError = true; }
}
if (hasError) { return Observable.throw('Invalid extension detected'); }
let observables: Observable<Parse.Object>[] = [];
for (let file of files) {
// Get its size
let img = new Image();
img.onload =() => {
// Create the Parse document
let parseImg = { url: '', type: file.type, width: img.width, height: img.height };
// Upload it on Amazon and add it to DB
observables.push(this.addPicture(parseImg, file, folder));
}
img.src = window.URL.createObjectURL(file);
}
return Observable.forkJoin(observables);
}
[Angular2 HTTP呼び出しがすべて終了したときを知る方法](https://stackoverflow.com/questions/36014508/how-to-know-when-all-angular2-http-calls-are-finished)の可能な複製) – echonax
fyi、私は質問をdownvoteしなかった – echonax
私は今この答えを見ています、ありがとう – trichetriche