2017-07-21 1 views
0

J'ai un objet observable et je veux émettre un élément par défaut après un certain temps (un timeout) tout en gardant le flux ouvert pour émettre de nouvelles valeurs A l'avenir. Comment puis-je faire ceci? J'ai essayé de le faire en faisant une fusion du flux original avec un autre flux qui déborde le flux original tout en mappant la valeur débalinée à la valeur par défaut que je veux.Programmation réactive: Emettre un élément spécifié quand un flux est inactif pendant un certain temps

pseudocode:

defaultDebounced = originalStream.debounce(time).map({x -> myDefaultValue}) 
myStream = rx.merge(originalStream, defaultDebounced) 

bien que je ne sais pas si je courrais dans certains cas, à la frontière comme le suivant, dans lequel le courant d'origine émet un élément comme les déclencheurs de délai et par hasard, la valeur par défaut est émis après.

original: ----A----B----------------------C------------ 
debounced: -----------------------<timeout>X------------ 
merged: --------------------------------CX----------- 

En outre, il y a l'inconvénient que le premier observable doit émettre au moins un élément de commande pour antirebond pour émettre la valeur par défaut.

Note: Je voudrais connaître la bonne façon de le faire, peu importe l'implémentation, mais au cas où je travaillerais sur RxSwift.

Répondre

0

Ce que j'ai finalement été:

originalStream.flatMapLatest({x -> 
    return Observable.timer(30, scheduler: MainScheduler.instance) 
     .map{_ -> defaultValue} 
     .startWith(x) 
})