How to use Q.all() with complex array of promises?

node.js, q

Solution

That's how Q is supposed to work. To get all the values, not the promises, you may use `.spread()`:

Q.all([a, b]).spread(function (a, b) {
    return a + b;
});

Each argument of the `spread()` callback will be the result of each promise, in its order.

If you think you'll have lots of promises in such array, loop thru the argument provided in `then()` and replace the promises with its value:

Q.all(promises).then(function(result) {
    for (var i = 0, len = result.length; i < len; i++) {
        if (Q.isPromise(result[i])) {
            result[i] = result[i].valueOf();
        }
    }

    // Next step!
});

Problem

Consider I have an array of objects and promises, something like: ``` [{ a: 1 }, { a: 4 }, { a: 4 }, { promiseSend: [Function], valueOf: [Function] }, { promiseSend: [Function], valueOf: [Function] }] ``` Now when call I `Q.all(arr)` and return the object value in `then()`, nothing's happen and still my array contains promise objects. Is there any way to work with the `Q.all()` and such a complex arrays?

Original source