Skip to content

Instantly share code, notes, and snippets.

@shamansir
Last active August 29, 2015 14:15
Show Gist options
  • Save shamansir/f66544416ac3379f81dc to your computer and use it in GitHub Desktop.
Save shamansir/f66544416ac3379f81dc to your computer and use it in GitHub Desktop.
Spread-Repeat
function numIter(max) {
return function(signal) {
if (signal) {
var value = 0;
return signal.takeWhile(function() { return value < max; })
.map(function() { console.log('iter('+max+')', value); return value++; })
} else {
return Kefir.fromBinder(function(emitter) {
var value = 0;
while (value < max) emitter.emit(value++);
emitter.end();
});
}
}
}
function joinIters(arr) {
var trg = [];
var finished = [];
var signal = signal || Kefir.emitter();
for (var i = 0; i < arr.length; i++) {
trg.push(Kefir.repeat((function(i) {
return function(cycle) {
if (cycle === 1) {
console.log('finish', i); finished.push(i);
}
return arr[i]((cycle > 0) ? signal.toProperty(undefined) : signal);
}
})(i)));
};
var zipped = Kefir.zip(trg).takeWhile(function() {
return (finished.length < arr.length);
});
return function(fn_res, fn_sig) {
var stream_finished = false;
zipped.onEnd(function() { stream_finished = true; });
if (fn_res) zipped = fn_res(zipped);
if (fn_sig) signal = fn_sig(signal);
if (!zipped || !signal) return;
while (!stream_finished) signal.emit();
}
}
/* console.log('--------');
var e = Kefir.emitter();
Kefir.repeat(function(i) {
if (i > 3) return;
return numIter(5)(e);
}).log();
e.emit();
e.emit();
e.emit();
e.emit();
e.emit();
e.emit();
e.emit();
e.emit();
e.emit();
e.emit();
e.emit();
e.emit();
e.emit();
e.emit();
e.emit();
e.emit(); */
console.log('--------');
/* var sig = Kefir.emitter();
sig.map(function() { return '!'; }).log('signal');
var stream_finished = false;
joinIters([ numIter(4), numIter(17), numIter(3) ], sig).onEnd(function() { stream_finished = true; }).log('zipped');
while (!stream_finished) sig.emit(); */
joinIters([ numIter(4), numIter(17), numIter(3) ])(function(r) { r.log(); return r; });
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment