[Node.js] Efficient File Processing in Node.js with Async Generators and Array.fromAsync
Using the Node.js glob function as a practical example, you'll learn how Array.fromAsync facilitates the creation of arrays from asynchronous iterables and how generators can improve performance in file processing tasks.
import { glob } from "node:fs/promises"
import os from "node:os"
import path from "node:path"
const cwd = path.join(os.homedir(), "dev")
const files = await Array.fromAsync(glob("*", {cwd}))
console.log(files)
glob("*", {cmd})
return an AsyncIterator, which yields the paths of files that math the pattern.
Array.fromAsync()
and Promise.all()
can both turn an iterable of promises into a promise of an array. However, there are two key differences:
Array.fromAsync()
awaits each value yielded from the object sequentially.Promise.all()
awaits all values concurrently.Array.fromAsync()
iterates the iterable lazily, and doesn't retrieve the next value until the current one is settled.Promise.all()
retrieves all values in advance and awaits them all.