code: 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();
      }
docs: 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);
  ```