> For the complete documentation index, see [llms.txt](https://conductor.js.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://conductor.js.org/api-reference/foreach.md).

# forEach

```erlang
forEach :: (Function callback, Collection collection) => undefined | Promise<undefined>
```

## description

Iterates over a collection and calls the provided callback function for each item in the collection. The callback function should have the following signature:

`(Any value, Any key, Collection collection) => Any`

where:

* **value** is the current item's value
* **key** is the item's key or index (depending on if the collection is an `Array`, a `Set`, an `Object`, or a `Map`).
* **collection** is the collection being iterated on.

{% hint style="info" %}
If the collection is a `Set`, the **value** and the **key** will be equal.
{% endhint %}

If the callback function is *asynchronous*, `forEach` will return a `Promise` which will be resolved when all the promises generated by calling the callback function with each item in the collection are resolved. You could say that `forEach` is roughly equivalent `map`, except it returns `undefined` in the end (ie `forEach( asyncFn, collection)` \~ `Promise.all(collection.map(asyncFn)).then(() => undefined)`).

## examples

### basic example

```javascript
import { forEach } from 'conductor'

const numbers = [3, 1, 4]
const log = x => console.log(x)
forEach(numbers, log)
// 3
// 1
// 4
```
