Background This code can leave the system in the inconsistent state: var q = require('q'); function foo() { var defer = q.defer(); process.nextTick(function () { defer.resolve(); }); return defer.promise; } var state = 'before foo'; foo() .then(function onSuccess() { console.log('success!'); state = 'foo finished'; }, function onError() { console.log('error :('); }); process.on('exit', function ()