lib/vow.js
function(iterable) {
        var defer = new Deferred(),
            isPromisesArray = isArray(iterable),
            keys = isPromisesArray?
                getArrayKeys(iterable) :
                getObjectKeys(iterable),
            len = keys.length,
            res = isPromisesArray? [] : {};

        if(!len) {
            defer.resolve(res);
            return defer.promise();
        }

        var i = len;
        vow._forEach(
            iterable,
            function(value, idx) {
                res[keys[idx]] = value;
                if(!--i) {
                    defer.resolve(res);
                }
            },
            defer.reject,
            defer.notify,
            defer,
            keys);

        return defer.promise();
    }
function(iterable) {
        var defer = new Deferred(),
            isPromisesArray = isArray(iterable),
            keys = isPromisesArray?
                getArrayKeys(iterable) :
                getObjectKeys(iterable),
            len = keys.length,
            res = isPromisesArray? [] : {};

        if(!len) {
            defer.resolve(res);
            return defer.promise();
        }

        var i = len;
        vow._forEach(
            iterable,
            function(value, idx) {
                res[keys[idx]] = value;
                if(!--i) {
                    defer.resolve(res);
                }
            },
            defer.reject,
            defer.notify,
            defer,
            keys);

        return defer.promise();
    }
function ( iterable ) { var defer = new Deferred ( ) , isPromisesArray = isArray ( iterable ) , keys = isPromisesArray ? getArrayKeys ( iterable ) : getObjectKeys ( iterable ) , len = keys . length , res = isPromisesArray ? [ ] : { } ; if ( ! len ) { defer . resolve ( res ) ; return defer . promise ( ) ; } var i = len ; vow . _forEach ( iterable , function ( value , idx ) { res [ keys [ idx ] ] = value ; if ( ! -- i ) { defer . resolve ( res ) ; } } , defer . reject , defer . notify , defer , keys ) ; return defer . promise ( ) ; }
Returns a promise, that will be fulfilled only after all the items in `iterable` are fulfilled.
If any of the `iterable` items gets rejected, the promise will be rejected.

@param {Array|Object} iterable
@returns {vow:Promise}

@example
with array:
```js
var defer1 = vow.defer(),
defer2 = vow.defer();

vow.all([defer1.promise(), defer2.promise(), 3])
.then(function(value) {
// value is "[1, 2, 3]" here
});

defer1.resolve(1);
defer2.resolve(2);
```

@example
with object:
```js
var defer1 = vow.defer(),
defer2 = vow.defer();

vow.all({ p1 : defer1.promise(), p2 : defer2.promise(), p3 : 3 })
.then(function(value) {
// value is "{ p1 : 1, p2 : 2, p3 : 3 }" here
});

defer1.resolve(1);
defer2.resolve(2);
```
Returns a promise that will be fulfilled only after all the items in iterable are fulfilled . If any of the iterable items gets rejected the promise will be rejected .