2017-10-13 6 views
1

J'ai un Observable<Bool> qui émet true lorsqu'une opération commence et false quand il se termine. Je voudrais afficher un message pendant que l'opération est en cours, mais seulement si cela prend plus de deux secondes pour commencer. Y a-t-il un moyen de créer une observable à laquelle je puisse lier mon message? Toute aide très appréciée!Comment puis-je appliquer un temps de grâce en utilisant RX?

Répondre

2

Si vous switchMap (un flatMap où lorsqu'un second élément est émis par la source de l'abonnement au est désinscrit et l'abonnement se déplace observable d'origine à l'autre), vous pouvez faire quelque chose comme ceci:

  1. booleanObservable
  2. .switchMap (carte fidèle à une minuterie observable de 2 secondes, la carte à un faux observable vide)
  3. .onNext montrent votre message (à côté ne se déclenche pas pour le vide et une réponse rapide aurait coupé la 2 seconde minuterie).

Remarque switchMap est 'switchLatest' dans RxSwift.

pourrait devenir quelque chose comme ceci:

booleanObservable 
    .map { inProgress -> Observable<Bool> in 
     if inProgress { 
      return Observable.just(true).delay(time: 2) 
     } else { 
      return Observable.just(false) 
     } 
    } 
    .switchLatest()