Define empty Bluebird promise like in Q

Fez Vrasta picture Fez Vrasta · Mar 27, 2014 · Viewed 16.9k times · Source

With Q I can define a new promise with:

var queue = q();

But with Bluebird if I do:

var queue = new Promise();

I get:

TypeError: the promise constructor requires a resolver function

How can I get the same result that I had with Q?

This is a snippet of my code:

var queue    = q()
    promises = [];
queue = queue.then(function () {
    return Main.gitControl.gitAdd(fileObj.filename, updateIndex);
});
// Here more promises are added to queue in the same way used above...
promises.push(queue);
return Promise.all(promises).then(function () {
   // ...
});

Answer

Benjamin Gruenbaum picture Benjamin Gruenbaum · Mar 27, 2014

Florian provided a good answer For the sake of your original question, there are several ways to start a chain with Bluebird.

One of the simplest is calling Promise.resolve() on nothing:

var queue = Promise.resolve(); //resolve a promise with nothing or cast a value

or

Promise.try(function(...){
    return ...//chain here
});

So you can do:

var queue    = Promise.resolve()
    promises = [];
queue = queue.then(function () {
    return Main.gitControl.gitAdd(fileObj.filename, updateIndex);
});

// Here more promises are added to queue in the same way used above...
promises.push(queue);
return Promise.all(promises).then(function () {
   // ...
});

Although, personally I'd do something like:

//arr is your array of fileObj and updateIndex

Promise.map(arr,function(f){ return Main.gitControl.gitAdd(f.filename,f.updateIndex).
    then (function(result){
        //results here
    });