2017-08-24 2 views
0

J'ai besoin d'exécuter une tâche plusieurs fois dans une boucle for. La tâche elle-même renvoie Observable<Void>. Je pense que je peux rencontrer des erreurs inattendues en m'abonnant continuellement. Est-il acceptable de s'abonner n fois au for-loop?RxSwift Plusieurs abonnements à la même chose Observable dans la boucle for

private func removeItem(from locations: Resource...) { 
    for resource in locations { 
     RemoveItemTask(id: item.value.id, resource: resource) 
      .execute(in: self.dispatcher) 
      .subscribe { event in 
       if let error = event.error { 
        self.error = Observable.of(error) 
       } 
      }.addDisposableTo(self.disposeBag) 
    } 
} 
+1

'Observable' est une monade, c'est-à-dire une solution de flux de contrôle de programmation fonctionnelle , c'est-à-dire un _emplacement_ pour des boucles, si/sinon, et autres. Mélanger des styles fonctionnels et impératifs de programmation peut difficilement être bénéfique. –

Répondre

0

Pourquoi voulez-vous utiliser une boucle for? RxSwift a beaucoup de solutions intéressantes que vous pouvez utiliser.

Alors vous avez des tâches, vous pouvez les map dans un tableau d'observables sans appeler subscribe:

let observables: [Observable<Void>] = locations.map({ ... }) 

Et puis gérer toutes les erreurs:

Observable 
    .merge(observables.map({ $0.materialize() })) 
    .flatMap({ Observable.from(optional: $0.error) }) 
    .subscribe(onNext: { (error) in 
     // Handle error 
    }) 
    .disposed(by: disposeBag)