Array.fromAsync() xây một mảng từ async iterable (hoặc sync iterable chứa promise), trả về một Promise.
- Lặp tuần tự và
awaittừng phần tử — khácPromise.all()chạy song song. Hợp khi nguồn là stream/paginated và bạn muốn xử lý lần lượt. - Hỗ trợ async iterator (
Symbol.asyncIterator), thứ màArray.from()không xử lý được.
async function* gen() { yield 1; yield 2; yield 3; }
await Array.fromAsync(gen()); // [1, 2, 3]
// có mapFn (cũng được await)
await Array.fromAsync([p1, p2], async (x) => x * 2);So sánh nhanh:
- Array.from(iter, fn) — đồng bộ, không await.
- Promise.all([...]) — song song, cần sẵn mảng promise.
- Array.fromAsync — tuần tự, await từng cái, nhận cả async iterable.
Lưu ý: vì tuần tự nên chậm hơn Promise.all khi các tác vụ độc lập — chọn theo nhu cầu thứ tự vs tốc độ.
Array.fromAsync() builds an array from an async iterable (or a sync iterable of promises) and returns a Promise.
- Iterates sequentially, awaiting each element — unlike
Promise.all(), which runs in parallel. Good for streamed/paginated sources processed one at a time. - Handles async iterators (
Symbol.asyncIterator), whichArray.from()cannot.
async function* gen() { yield 1; yield 2; yield 3; }
await Array.fromAsync(gen()); // [1, 2, 3]
await Array.fromAsync([p1, p2], async (x) => x * 2);Quick contrast:
- Array.from(iter, fn) — sync, no await.
- Promise.all([...]) — parallel, needs an array of promises ready.
- Array.fromAsync — sequential, awaits each, accepts async iterables.
Note: being sequential, it's slower than Promise.all for independent tasks — choose by ordering vs speed.