2017-07-25 3 views
1

私は写真をアップロードするためのサービスを持っています。画像をアップロードするには、私が行うのは角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); 
} 
+1

[Angular2 HTTP呼び出しがすべて終了したときを知る方法](https://stackoverflow.com/questions/36014508/how-to-know-when-all-angular2-http-calls-are-finished)の可能な複製) – echonax

+0

fyi、私は質問をdownvoteしなかった – echonax

+0

私は今この答えを見ています、ありがとう – trichetriche

答えて

3

です到着するか、最終的にはObservable.concat()を呼び出して要求を次々と呼び出す。

+0

何かこの答えに間違っていますか? – martin

+0

それは間違いないでしょうが、それはまったく正しいです。あなたはメタフォーラムが示唆しているように、欺瞞の質問の下で答えを提供することができます:/ – echonax

+0

よく分かりません、私は重複したコメントで与えられたsolutoinをテストしています(しかし、あなたのように見えます)。なぜObservable.mergeを使うのですか?私はすでにマージする方法を尋ねています。 Forkjoinは自動的にマージされませんか? – trichetriche

関連する問題