lib/async.js
function asyncForEach(promise, iterator, scope, limit) {
    return asyncArray(asyncLoop(promise, iterator, scope, limit).chain(function (results) {
        return results.arr;
    }));
}
function asyncForEach(promise, iterator, scope, limit) {
    return asyncArray(asyncLoop(promise, iterator, scope, limit).chain(function (results) {
        return results.arr;
    }));
}
function asyncForEach ( promise , iterator , scope , limit ) { return asyncArray ( asyncLoop ( promise , iterator , scope , limit ) . chain ( function ( results ) { return results . arr ; } ) ) ; }
Loops through the results of an promise. The promise can return an array or just a single item.

```
function asyncArr(){
var ret = new comb.Promise();
process.nextTick(ret.callback.bind(ret, [1,2,3,4,5]);
return ret.promise;
}

comb.async.forEach(asyncArr(), function(){
//do something with it
}).then(function(arr){
console.log(arr); //[1,2,3,4,5];
});

```

You may also return a promise from the iterator block.

```
var myNewArr = [];

comb.async.forEach(asyncArr(), function(item, index){
var ret = new comb.Promise();
process.nextTick(function(){
myNewArr.push([item, index]);
ret.callback();
});
return ret.promise();
}).then(function(){
console.log(myNewArr) //[[1,0], [2,1], [3,2], [4,3], [5,4]]
});
```


@param {comb.Promise|Array} promise the promise or array to loop through
@param {Function} iterator a function to invoke for each item
@param [scope] optional scope to execute the function in.
@return {comb.Promise} a promise that is resolved with the original array.
@static
@memberof comb.async
@name forEach
Loops through the results of an promise . The promise can return an array or just a single item .