[API reference](https://evolu.dev/docs/api-reference) › [@evolu/common](https://evolu.dev/docs/api-reference/common) › [Array](https://evolu.dev/docs/api-reference/common/Array) › arrayFromAsync

```ts
function arrayFromAsync<T>(
  iterable: AsyncIterable<T, any, any> | Iterable<T | PromiseLike<T>, any, any>,
): Promise<readonly T[]>;
```

Defined in: [packages/common/src/Array.ts:315](https://github.com/evoluhq/evolu/blob/037c390af081e9944d616ff298a729515c5c5ab7/packages/common/src/Array.ts#L315)

Better `Array.fromAsync`.

Returns a readonly array and awaits promised items from sync or async
iterables.

### Awaiting sync and async iterables

```ts

const fromIterable = await arrayFromAsync([
  Promise.resolve(1),
  Promise.resolve(2),
  Promise.resolve(3),
]);
assertEqual(fromIterable, [1, 2, 3]);

const fromAsyncIterable = await arrayFromAsync(
  (async function* (): AsyncGenerator<number> {
    await Promise.resolve();
    yield 1;
    yield 2;
  })(),
);
assertEqual(fromAsyncIterable, [1, 2]);
assertType<ReadonlyArray<number>, typeof fromAsyncIterable>();
```

Unlike `Array.fromAsync`, there's no map parameter — map the result with
[mapArray](https://evolu.dev/docs/api-reference/common/Array/functions/mapArray) or use
[iterator helpers](https://web.dev/blog/baseline-iterator-helpers)
directly on iterables.