2017-10-05 2 views
0

J'ai un service de téléchargement de fichier dans l'angle 2 qui renvoie un observable pour la méthode fileUpload. Supposons que j'ai plus d'un téléchargement de fichier. Je veux être en mesure d'afficher le statut de chaque fichier téléchargé ou non, et aussi d'effectuer d'autres actions quand toutes les finitions sont terminées.Observer un tableau d'observables RxJS un par un et être averti quand tous sont terminés

Donc, c'est quelque chose comme ça.

uploadAll(files): void { 
    let fileUploadObservables = []; 

    files.forEach(file => { 
     fileUploadObservables 
     .push(this.fileUploadService.upload(file)); 
    }); 


    Observable.forkJoin(...fileUploadObservables) 
      .subscribe((res) => { 
       //Do something else when all files finish uploading 
      }); 
} 

forkJoin ne me avertit lorsque tous a fini de charger, mais je dois être informé de chacun d'eux termine, et quand tous fini. Je ne peux en faire qu'un avec les observables.

Répondre

0

Afin de vérifier quand toutes les observables sont terminées, vous devez passer un troisième paramètre à la méthode subscribe. La méthode subscribe prend jusqu'à 3 paramètres. Considérez:

someObservableOfObservable().subscribe(
    (observableResult) => { 
    // I will execute each time a value pass through this stream 
    }, 
    (error) => { 
    // I will execute if any exception/error is thrown 
    }, 
() => { 
    // I will execute when the Observable stream is exhausted 
    } 
)