Skip to content

Instantly share code, notes, and snippets.

@laser
laser / streamComp.js
Created September 24, 2014 06:03
error / stream composition
var streamA = Bacon.fromNodeCallback(client, 'get', 'foo');
var streamB = streamA.flatMap(function(foo) {
return Bacon.fromNodeCallback(client, 'post', 'bar', { data: foo });
});
streamB.onError(function(err) {
throw err; // error from either the GET or the POST
});
@laser
laser / entries_erro.js
Last active August 29, 2015 14:06
entres on error
funFact.merge(entries).onError(function(err) {
throw err; // an error from the call to MongoDB or our HTTP client
});
@laser
laser / entries_sub.js
Created September 24, 2014 06:02
entries subscriber
entries.onValue(function() {
// deliberate no-op
});
@laser
laser / funFact_sub.js
Created September 24, 2014 06:02
funFact sub
funFact.onValue(function(fact) {
io.emit('message', fact);
});
@laser
laser / messages_sub.js
Created September 24, 2014 06:01
messages subscriber
messages.onValue(function(message) {
io.emit('message', '' + message.author.id + ': ' + message.txt);
});
@laser
laser / connections_sub.js
Created September 24, 2014 06:01
connections subscriber
connections.onValue(function(socket) {
socket.broadcast.emit('message', 'A new user connected, with ID: ' + socket.id);
});
@laser
laser / entries.js
Created September 24, 2014 06:00
entries
var entries = messageWindow
.filter(function(acc) {
return acc.length === 20;
});
.flatMap(function(messages) {
return Bacon.retry({
retries: 10,
delay: function() { return 100; },
source: function() {
return Bacon.fromNodeCallback(client, 'post', 'log', {
@laser
laser / funfact.js
Last active August 29, 2015 14:06
funFact
var funFact = messageWindow
.filter(function(acc) {
return acc.length === 20;
});
.flatMap(function() {
return Bacon.fromNodeCallback(database.getFunFact));
});
@laser
laser / currentMessages.js
Created September 24, 2014 05:59
current messages
var messageWindow = messages.scan([], function(acc, message) {
return acc.length === 20 ? [] : acc.concat(message);
});
@laser
laser / messages.js
Created September 24, 2014 05:58
messages
var messages = connections.flatMap(function(socket) {
return Bacon.fromBinder(function(sink) {
socket.on('message', function(txt) {
sink({ author: socket, txt: txt });
});
});
});