Promises from domains
OTHER License
Small experiment combining node.js domain error handling with promises using the Q library.
Using domains it is possible to capture unhandled asynchronous exceptions. This module wraps that magic to promises.
var qdomain = require("qdomain");
qdomain(function(defer){
setTimeout(function(){
throw new Error("async error");
}, 100);
}).then(function(){
// nothing...
}, function(err){
// We will get the thrown async error here!
});
qdomain
takes a callback and returns a promise. It can be resolved or
rejected using following methods:
resolve
or reject
on the given defer objectThis makes it easy to capture stream errors while piping for example
qdomain(function(defer){
fs.createReadStream("somefile")
.pipe(transform1())
.pipe(transform2())
.pipe(transform3())
.pipe(fs.createWriteStream("output-file"))
.on("close", defer.resolve);
}).fail(function(err){
// Any IO errors or transform errors will be handled here
});
When the promise is resolved or rejected the domain associated with it will be disposed automatically. Which means all IO and timers must be completed before resolving the promise or they will be canceled! This has few nice features:
qdomain
callbacknpm install qdomain