J'ai enlevé le passe-partout pour arriver au pointrxjs zip n'est pas paresseux?
// a.js
// My observables from stream and event
this.a = Rx.Node.fromStream(this.aStream());
this.itemSource = Rx.Observable.fromEvent(ee, 'addItem');
// Zip 'em
this.itemcombo = Rx.Observable.zip(this.a, this.itemSource, function (s1, s2) {
return {item: s2, a: s1.toString()};
});
// Streams the lowercase alphabet
rb.prototype.aStream = function aStream() {
var rs = Readable();
var c = 97;
rs._read = function() {
rs.push(String.fromCharCode(c++));
console.log('Hit!');
if (c > 'z'.charCodeAt(0)) {
rs.push(null);
}
};
return rs;
};
// b.js
(nécessite le module exporté ci-dessus)
rb.enqueue('a'); // The method simply does an ee.emit('addItem', ...) in the module to trigger the itemSource observable
Ce que je pensais voir:
{item: 'a', a: 'a'}
imprimé dans le console
Qu'est-il arrivé:
Hit!
a été imprimé 24 fois avant {item: 'a', a: 'a'}
. Cela signifie que zip
a pris toutes les valeurs de aStream
, les a mises en mémoire tampon et a ensuite fait ce qu'il était censé faire.
Comment puis-je obtenir la même fonctionnalité zip
offre mais paresseusement? Mon but est d'utiliser un flux infini/observable et de le compresser avec un flux fini (asynchrone).
Modifier
Voir/Modifier via runnable: RX Zip testEdit 2 code mis à jour en fonction de réponse -> pas de sortie maintenant.
S'il vous plaît rajouter le passe-partout et de simplifier l'exemple. –
http://www.yoda.arachsys.com/csharp/complete.html –
@DaveSexton Voir: http://pastebin.com/mnc82KuV et http://pastebin.com/8HxURWYc pour une version copier/coller/exécuter - Merci! Je ne pense pas que l'exemple puisse être simplifié davantage. C'est 2 flux et la fonction zip. J'ai inclus le flux que j'ai utilisé pour référence, il aurait pu être omis, il est prudent d'ignorer cette partie, mais j'ai pensé que cela pourrait être utile. – rollingBalls