异步迭代器
在异步编程中,经常需要遍历异步数据流进行操作。ES2018 引入了异步迭代器,可以方便的实现异步数据流的迭代。
异步迭代器是一个对象,它实现了 Symbol.asyncIterator
方法。该方法返回一个迭代器对象,该对象具有 next
方法,用来异步获取下一个值。
下面是一个简单的例子,通过异步迭代器实现对异步数据流的遍历。
-- -------------------- ---- ------- ----- -------- --------- - -- ------ ----- ------ - ----- --------------------------------------- ----- ---- - ----- -------------- -- ------- ------ - ------------------------ - --- ----- - -- ------ - ----- ------ - ----- ----- - -------------- -- ------- ----- --- ------------ - ------ - ------ ----- ----- -- - ---- - ------ - ----- ---- -- - - -- - -- - ----- -------- --------- - ----- ---- - ----- ---------- --- ----- ------ ---- -- ----- - ------------------ - - ----------
首先,通过 async function
异步获取数据,然后构造一个异步迭代器对象,该对象通过 Symbol.asyncIterator
方法实现。该方法返回一个迭代器对象,该对象具有 next
方法,用来异步获取下一个值。
使用 for await...of
循环遍历异步数据流,每次异步获取下一个值,直到数据流结束。
Rest/Spread 属性函数
Rest/Spread 属性函数是一个比较有用的语言特性,它可以更方便地处理对象和数组。
Rest 属性函数用来获取对象或数组的剩余部分,放到一个新的对象或数组中。Spread 属性函数用来将对象或数组展开,放到另一个对象或数组中。
Rest 属性函数
下面是 Rest 属性函数的简单示例。
const { a, b, ...c } = { a: 1, b: 2, c: 3, d: 4 }; console.log(c); // { c: 3, d: 4 } const [first, second, ...rest] = [1, 2, 3, 4, 5]; console.log(rest); // [3, 4, 5]
在该示例中,使用了对象解构和数组解构语法,通过 ...
运算符获取对象或数组的剩余部分。得到了一个新的对象或数组。
Spread 属性函数
下面是 Spread 属性函数的简单示例。
const a = [1, 2, 3]; const b = [4, 5, 6]; const c = [...a, ...b]; console.log(c); // [1, 2, 3, 4, 5, 6] const d = { x: 1, y: 2 }; const e = { ...d, z: 3 }; console.log(e); // { x: 1, y: 2, z: 3 }
在该示例中,使用了 Spread 运算符,将对象或数组展开,放到另一个对象或数组中。
此外,对象解构和数组解构语法也支持 Spread 运算符,可以将对象或数组中的属性值直接解构到另一个对象或数组中。
总结
异步迭代器和 Rest/Spread 属性函数是 ECMAScript 2018 小幅更新中较重要的特性。它们极大地简化了异步编程和处理对象和数组的过程,是前端开发人员必须掌握的知识。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64a1225748841e9894d67935