ES9 新增特性之 --"异步迭代器和 for-await-of 循环"
在 JavaScript 中,使用迭代器遍历数组和集合是非常常见的操作。ES6 引入了迭代器和 for-of 循环,使得遍历集合变得更加简单和直观。但是,这些特性只适用于同步迭代器。在异步编程中,我们经常需要对异步集合进行遍历,这时候就需要使用异步迭代器和 for-await-of 循环。
在 ES9 中,JavaScript 引入了异步迭代器和 for-await-of 循环,这为我们在异步编程中遍历集合提供了非常方便的方式。
异步迭代器
异步迭代器是一个返回 Promise 对象的迭代器。它可以用来遍历异步集合,如异步生成器函数返回的值。
异步迭代器是通过在迭代器对象上定义一个异步方法 Symbol.asyncIterator 来实现的。这个方法返回一个异步迭代器对象,该对象具有一个异步方法 next(),该方法返回一个 Promise 对象,该 Promise 对象会在异步操作完成时 resolve,resolve 的值是一个包含 value 和 done 两个属性的对象,其中 value 是返回的值,done 表示是否完成迭代。
下面是一个简单的示例,展示了如何使用异步迭代器遍历异步集合:
// javascriptcn.com 代码示例 async function* gen() { yield Promise.resolve(1); yield Promise.resolve(2); yield Promise.resolve(3); } async function main() { for await (const value of gen()) { console.log(value); } } main();
在上面的示例中,我们定义了一个异步生成器函数 gen,该函数返回一个包含三个 Promise 对象的迭代器。然后我们使用 for-await-of 循环遍历这个迭代器,每次迭代都会等待 Promise 对象完成,然后打印出返回的值。
for-await-of 循环
for-await-of 循环是一个用于异步迭代器的 for-of 循环。它可以用来遍历异步集合,如异步生成器函数返回的值。
for-await-of 循环会自动调用异步迭代器的 next() 方法,并等待 Promise 对象完成,然后获取返回的值。如果 done 属性为 true,则退出循环,否则继续下一次迭代。
下面是一个使用 for-await-of 循环遍历异步集合的示例:
// javascriptcn.com 代码示例 async function* gen() { yield Promise.resolve(1); yield Promise.resolve(2); yield Promise.resolve(3); } async function main() { const genObj = gen(); let result = await genObj.next(); while (!result.done) { console.log(result.value); result = await genObj.next(); } } main();
在上面的示例中,我们定义了一个异步生成器函数 gen,该函数返回一个包含三个 Promise 对象的迭代器。然后我们使用 while 循环遍历这个迭代器,每次迭代都会等待 Promise 对象完成,然后打印出返回的值。
总结
ES9 引入的异步迭代器和 for-await-of 循环为我们在异步编程中遍历集合提供了非常方便的方式。我们可以使用异步迭代器来定义异步集合的迭代器,然后使用 for-await-of 循环来遍历异步集合。这些特性可以帮助我们更加简单和直观地处理异步操作,提高代码的可读性和可维护性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/650a98af95b1f8cacd4f268f