Last active
December 19, 2015 15:59
-
-
Save theduderog/5980337 to your computer and use it in GitHub Desktop.
Q does not resolve callbacks until next round of setImmediate()
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var q = require('q') | |
, assert = require('assert') | |
, dOrigin = q.defer() | |
, dDependent = q.defer() //this one gets resolved by callbacks from dOrigin | |
, dDependent2 = q.defer() //this one gets resolved by linking directly to dOrigin | |
; | |
//Link to dOrigin by registering callbacks | |
dOrigin.promise.then( | |
function (result) { | |
dDependent.fulfill(result); | |
}, | |
function (err) { | |
dDependent.reject(err); | |
} | |
); | |
//Link directly to dOrigin using resolve() method | |
dDependent2.resolve(dOrigin); | |
//Resolve dOrigin | |
dOrigin.resolve('DONE'); | |
assert.ok(dOrigin.promise.isFulfilled(), 'Origin promise is fulfilled'); | |
assert.ok(dDependent.promise.isPending(), 'Dependent promise is still pending but should be fulfilled'); | |
assert.ok(dDependent2.promise.isFulfilled(), 'Dependent2 promise is fulfilled'); | |
//dDependent gets resolved on the next round of setImmediate() | |
// NOTE: this is not true for nextTick() | |
var ticks = 0; | |
function checkFulfilled () { | |
ticks += 1; | |
// console.log(ticks + " tick(s)"); | |
if (dDependent.promise.isFulfilled()) { | |
console.log("It's done! in " + ticks + " ticks"); | |
} | |
else { | |
setImmediate(checkFulfilled); | |
} | |
}; | |
setImmediate(checkFulfilled); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment