Streaming events
|
eventSource.on('eventType', function(eventData){
if(valied(eventData)){
rootObject.result = processData(eventData);
}
});
|
eventSource
.stream('eventType')
.filter(valid)
.map(processData)
.bindTo(rootObject, 'result');
|
Event processing
|
var cachedTime;
button.addEventListener('click', function(e){
var self = this;
clearTimeout(timer);
timer = setTimeout(function(){
send(self.value);
}, 500)
});
|
Warden(button)
.stream('click')
.debounce(500)
.map('@value')
.listen(send);
|
Event composing
|
var cachedTime, cachedFrom;
function log(data){
var messate = 'Data from socket ' +
data.socket_name +
' was recived first';
console.log(message);
}
function callback(e){
if(!cachedFrom){
cachedFrom = e.socket_name;
cachedTime = e.timeStamp;
}else{
if(cachedFrom != e.socket_name){
if(cachedTime > e.timeStamp){
log(e)
}else{
cachedTime = e.timeStamp
}
}else{
cached_time = e.timeStamp;
}
}
}
socket.on('a', callback);
socket.on('b', callback);
|
var sStream = socket.stream('a'),
bStream = socket.stream('b');
aStream.resolve(bStream, function(a, b){
return a.timeStamp > b.timeStamp ? a : b;
}).listen(log);
|
Reactive Calculations
|
var a = 10;
var b = 20;
var c = a + b;
console.log(c);
// -> 30;
a = 20;
console.log(c);
// -> 30
// To update you need:
c = a + b;
console.log(c)
// -> 40
|
var a = Warden(10);
var b = Warden(20);
var c = Warden.Formula([a,b], function(x,y){
return x + y;
});
console.log(c.value);
// -> 30
a.value = 20;
console.log(c.value);
// -> 40
// It updates itself
|
Values in time
|
var a = 0;
var b = 0;
function bigger(x, y){
return x > y ? x : y;
}
var c = bigger(a, b);
a = 20;
b = 10;
// c = 0;
c = bigger(a, b);
// c = 20
b = 30;
c = bigger(a, b)
// c = 30
// need to update c every time
|
var a = Warden(0);
var b = Warden(0);
var c = a.combine(b, bigger).watch();
a.value = 20;
// c.value = 20
b.value = 30;
// c.value = 30;
a.value = 40;
// c.value = 40;
|