Skip to content

Instantly share code, notes, and snippets.

@ysmood
Forked from spion/promise-observer-example.js
Last active October 14, 2015 03:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ysmood/1db734e43fe36a59f289 to your computer and use it in GitHub Desktop.
Save ysmood/1db734e43fe36a59f289 to your computer and use it in GitHub Desktop.
var Observable = require('yaku/lib/Observable')
var Promise = require('bluebird');
var assert = require('assert');
function mkTransaction(tId) {
var queries = []
return {
query: function query(q) { queries.push(q); return query },
close: function() { queries.push('close ' + tId); return queries; }
}
}
function makeEnvironment() {
var trans = new Observable();
return {
subscribe: trans.subscribe.bind(trans),
start: function(id) {
var tx = mkTransaction(id);
var out = Observable.all(trans.subscribers.slice(0, 3)).subscribe(tx.close);
trans.emit(tx.query);
return new Promise(out.subscribe.bind(out));
}
}
}
function test() {
var env = makeEnvironment();
var q1 = env.subscribe(function(q) {
return Promise.resolve(1).delay(1).then(q)
});
var q2 = env.subscribe(function(q) {
return Promise.resolve(2).delay(9).then(q)
});
var q3 = env.subscribe(function(q){
return Promise.resolve(3).delay(20).then(q)
});
var q4 = env.subscribe(function(q){
return new Promise(function () {});
});
env.start(1).then(function(queries) {
console.log(queries);
assert.deepEqual(queries, [1,2,3,'close 1']);
})
env.start(2).then(function(queries) {
console.log(queries);
assert.deepEqual(queries, [1,2,3,'close 2']);
})
}
test();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment