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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://conductor.js.org/1.3.0/api-reference/foreach.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
