Skip to content

Instantly share code, notes, and snippets.

@dijam
Last active December 10, 2015 11:27
Show Gist options
  • Save dijam/0f71e20917200e32981d to your computer and use it in GitHub Desktop.
Save dijam/0f71e20917200e32981d to your computer and use it in GitHub Desktop.
var q = require('q');
var fs = require('fs');
function test() {
var deferred = q.defer();
fs.readFile("package.json", "utf-8", function (error, text) {
if (error) {
deferred.reject(new Error(error));
} else {
setTimeout(function() {
console.log('I am done! who is next?');
deferred.resolve(text);
}, 1500);
}
});
return deferred.promise;
}
function test2() {
var deferred = q.defer();
test().then(deferred.resolve('before'));
return deferred.promise;
}
function test3() {
var deferred = q.defer();
test().then(function () {
deferred.resolve('after');
});
return deferred.promise;
}
function test4() {
var deferred = q.defer();
test().then(deferred.resolve);
return deferred.promise;
}
test2().then(function (data) {
console.log('This one calls ' + data + ' results coming');
});
test3().then(function (data) {
console.log('This one calls ' + data + ' results coming');
});
test4().then(function (data) {
console.log('This one calls after results with data from package.json ', data);
});
@nippe
Copy link

nippe commented Dec 10, 2015

I've been using the

var deferred = q.defer();
...
if(x) {
  q.resolve(..); 
} else {
  q.reject(...);
}
return deferred.promise;

Pattern a lot until I read this: https://github.com/petkaantonov/bluebird/wiki/Promise-anti-patterns#the-deferred-anti-pattern

Now I try to avoid it, but I really don't know how to do that using Q. In private projects I use Bluebird which has a nice, terse syntax which I really like.

function isItAValidTime(currentTime, usingTimeSlots) {
  return new Promise(function(resolve, reject) {
    var theHour = currentTime.getHours();
    var day = currentTime.getDay();
    if (!usingTimeSlots || (theHour >= 5 && theHour < 8)) {
      resolve(true);
    } else {
      blinkPing();
      reject(new Error('Not in valid time slot'));
    }
  });
}

Do you know if you can do something similar in Q?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment