2017-08-27 2 views
0

J'ai besoin d'aide pour regrouper des éléments sur un flux infini sans perte de données.Comment grouper des éléments dans des groupes de taille n dans RxJs 5?

La taille des groupes ne doit pas être supérieure à n éléments. Si pendant un certain temps aucun élément n'est apparu, la taille du groupe actuel peut être inférieure à n.

Essayer ce code:

Observable.create(observer => { 
    setTimeout(() => observer.next([1]),   90) 
    setTimeout(() => observer.next([2, 3]),  120) 
    setTimeout(() => observer.next([4, 5, 6]),  160) 
    setTimeout(() => observer.next([7, 8, 9, 10]), 310) 
    setTimeout(() => observer.next([11]),   360) 
}) 
.flatMap(xs => xs) 
.bufferTime(100, 100, 3) // group every 100 ms or by 3, whatever comes first 
.takeUntil(Observable.timer(590)) 
.subscribe(x => console.log(x)) 

il donne le résultat suivant:

[ 1 ] 
[ 2, 3, 4 ] 
[] 
[ 7, 8, 9 ] 
[ 11 ] 
[] 

Mais j'ai besoin:

[ 1 ] 
[ 2, 3, 4 ] 
[ 5, 6 ] 
[] 
[ 7, 8, 9 ] 
[ 10, 11 ] 
[] 

Toute aide appréciée

Répondre

1

Merci à this answer Je me réponds moi-même. Pour atteindre mon objectif, je dois appeler comme ceci

.bufferTime(100, null, 3)