synchronize
Advanced tools
Comparing version 0.8.0 to 0.9.0
{ | ||
"name" : "synchronize", | ||
"main" : "./sync", | ||
"version" : "0.8.0", | ||
"version" : "0.9.0", | ||
"homepage" : "http://alexeypetrushin.github.com/synchronize", | ||
@@ -6,0 +6,0 @@ "dependencies" : { |
21
sync.js
@@ -66,2 +66,23 @@ var Fiber = require('fibers') | ||
// Exactly the same as defer, but additionally it triggers an error if there's no response | ||
// on time. | ||
sync.deferWithTimeout = function(timeout){ | ||
if(!timeout) throw new Error("no timeout provided!") | ||
var defer = this.defer() | ||
var called = false | ||
var d = setTimeout(function(){ | ||
if(called) return | ||
called = true | ||
defer(new Error("defer timed out!")) | ||
}, timeout) | ||
return function(){ | ||
if(called) return | ||
called = true | ||
clearTimeout(d) | ||
return defer.apply(this, arguments) | ||
} | ||
} | ||
// | ||
@@ -68,0 +89,0 @@ sync.deferSerial = function(){ |
@@ -182,2 +182,18 @@ var sync = require('../sync') | ||
it('should abort on timeout', function(done){ | ||
sync.fiber(function(){ | ||
defer = sync.deferWithTimeout(100) | ||
setTimeout(function(){defer(null, 'some result')}, 10) | ||
expect(sync.await()).to.eql('some result') | ||
try{ | ||
defer = sync.deferWithTimeout(1) | ||
setTimeout(function(){defer(null, 'some result')}, 10) | ||
sync.await() | ||
}catch(err){ | ||
expect(err.message).to.eql('defer timed out!') | ||
} | ||
}, done) | ||
}) | ||
beforeEach(function(){ | ||
@@ -184,0 +200,0 @@ this.someKey = 'some value' |
193762
5935