2017-09-21 14 views
0

Quel serait l'opérateur pour rendre un observable à partir d'un tableau mais seulement émettre la prochaine valeur observable basée sur le changement/compte d'un autre flux d'événement, disons un clic?Comment différer l'émission d'un Observable basé sur un autre flux d'événements?

const scroller$ = Rx.Observable.of(1,2,3,4); 
Rx.Observable.fromEvent(document, 'click'); // need help here 
scroller$.subscribe(console.log) 

// click // 1 

// click // 2 

// click // 3 

// click // 4 

Répondre

1

Vous pouvez utiliser zip à faire:

const scroller$ = Rx.Observable.of(1, 2, 3, 4); 
scroller$.zip(
    Rx.Observable.fromEvent(document, 'click'), 
    (value, event) => value // Specify a projection function to ignore the event 
).subscribe(console.log); 

La documentation zip est here, mais il est ... un travail en cours.

Fondamentalement, zip combine les valeurs émises par les observables d'entrée dans l'étape de verrouillage. Ainsi, lorsque le premier événement est émis, il sera combiné et émis avec la première valeur de scroller$ et rien d'autre ne sera émis jusqu'à ce que le deuxième événement se produise, etc.

zip peut être passé une fonction pour projeter les valeurs combinées, donc, si vous êtes uniquement intéressé par la valeur - et non l'événement - vous pouvez utiliser une fonction de projection pour ignorer l'événement.

+0

Existe-t-il une manière plus simple, procédurale d'écrire ceci? –

+0

@ ItayMoav-Malimovka Je ne comprends pas pourquoi vous voudriez faire cela, si vous utilisez RxJS. Je dirais que non, il n'y en a pas, car c'est intrinsèquement réactif. – cartant

+0

Cela m'aide à comprendre ce qui se passe, si je le vois une fois dans la procédure, je peux le traduire dans mon esprit plus facilement, jusqu'à ce que je développe la façon de penser RxJS. –