Get to know MDN better
此页面由社区从英文翻译而来。了解更多并加入 MDN Web Docs 社区。
Array.fromAsync() 静态方法可以由一个异步可迭代对象、可迭代对象或类数组对象创建一个新的、浅拷贝的 Array 实例。
要转换为数组的异步可迭代、可迭代或类数组对象。
mapFn 可选为数组中的每个元素执行的函数。如果提供了该函数,则每个要添加到数组中的值都会先通过该函数处理,mapFn 的返回值将代替该值被添加到数组中(在等待兑现后)。该函数被调用时将传入以下参数:
element数组中当前正在处理的元素。由于所有元素都会先等待其兑现,因此该值永远不会是 thenable。
index正在处理的元素在数组中的索引。
thisArg 可选执行 mapFn 时用作 this 的值。
一个新的 Promise,其兑现值是一个新的 Array 实例。
Array.fromAsync() 允许你从以下对象中创建数组:
Array.fromAsync() 迭代异步可迭代对象的方式与 for await...of 很相似。Array.fromAsync() 在行为上与 Array.from() 几乎等价,除了以下几点:
Array.fromAsync() 和 Promise.all() 都可以将一个 promise 可迭代对象转换为一个数组的 promise。然而,它们有两个关键区别:
Array.fromAsync() 内部会等待 mapFn 的输入和输出的兑现。
Array.fromAsync() 会依次等待对象中产生的每个值兑现。Promise.all() 会并行等待所有值兑现。
如果被迭代的对象是同步可迭代对象,并且在迭代时抛出错误,类似于 for await...of,底层迭代器的 return() 方法将不会被调用,因此迭代器不会被关闭。
如果需要关闭迭代器,则需要使用 for...of 循环,并手动等待每个值兑现。
| ECMAScript® 2027 Language Specification # sec-array.fromasync |
启用 JavaScript 以查看此浏览器兼容性表。