docs: function _each( object, callback, thisObj ) {
  
  		if ( !object ) {
  			return Promise.resolve();
  		}
  
  		var results;
  		var fns = [];
  
  		if ( Object.prototype.toString.call( object ) === '[object Array]' ) {
  
  			results = [];
  
  			var length = object.length;
  			for ( var idx = 0; idx < length; idx ++ ) {
  				var value = callback.call( thisObj || this, object[ idx ], idx );
  				if ( value ) {
  					fns.push( value );
  					if ( value instanceof Promise ) {
  						value.then( function( key, value ) {
  							results[ idx ] = value;
  						}.bind( this, key ));
  					} else {
  						results[ idx ] = value;
  					}
  				}
  			}
  
  		} else {
  
  			results = {};
  
  			for ( var key in object ) {
  				if ( object.hasOwnProperty( key ) ) {
  					var value = callback.call( thisObj || this, object[ key ], key );
  					if ( value ) {
  						fns.push( value );
  						if ( value instanceof Promise ) {
  							value.then( function( key, value ) {
  								results[ key ] = value;
  							}.bind( this, key ));
  						} else {
  							results[ key ] = value;
  						}
  					}
  				}
  			}
  
  		}
  
  		return Promise.all( fns ).then( function() {
  			return results;
  		});
  
  	}