How to actually use Q promise in node.js?

javascript, node.js, promise, q

Solution

`promiseMeSomething()` is going to return a Q promise object, which will have `then` function in it, which is defined, like this

Promise.prototype.then = function (fulfilled, rejected, progressed) {

The simplest way to create a Promise object would be to use the `Q` function constructor, like this

new Q(value)

will create a new promise object. You can then attach the success and failure handlers, like this

new Q(value)
.then(function(/*Success handler*/){}, function(/*Failure handler*/){})

Moreover, if you pass a single nodejs-style function to `.then` function, it will call that function with the success value like this

callback(null, value)

or if there is a problem, then

callback(error)

For your particular case, `setTimeout` accepts the function to be called as the first parameter. So, it would take quite few lines of code to make it really work with promises. So, `Q` has a convenient function, for this purpose, `Q.delay`, which can be used like this

var Q = require('q');

function async() {
    return Q.delay(1000)
}

async()
.then(function() {
    console.log('async called back');
});

You can write it shorter like this

Q.delay(1000)
    .then(function() {
        console.log('async called back');
    });

If you wanted to call the callback function with someother value, then you can do it like this

Q.delay(1000, "Success")
    .then(function(value) {
        console.log('async called back with', value);
    });

This is going to be useful, when you want to have a delay between two functions and the second function is dependent on the first function.

Problem

This might be a noob question, but I'm new to promises and trying to figure out how to use Q in node.js. I see the tutorial begins with a ``` promiseMeSomething() .then(function (value) {}, function (reason) {}); ``` but I fail to grasp where exactly does the `.then` came from. I guess it comes from ``` var outputPromise = getInputPromise() .then(function (input) {}, function (reason) {}); ``` but where does `getInputPromise()` come from? I find no previous mention of it. I have included it in my project like so ``` var Q = require('q'); // this is suppose, the async function I want to use promise for function async(cb) { setTimeout(function () { cb(); }, 5000); } async(function () { console.log('async called back'); }); ``` How do I use `Q` and its `.then` here in my example?

Original source

Related problems