---
description: Execute a function for each item in a collection
---

# 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
```

