面试题答案
一键面试- 基本步骤:
- 定义异步迭代器:使用
async function
定义一个函数,函数内部使用yield
关键字来暂停和恢复执行,以实现异步操作的迭代。 - 使用
for await...of
循环:该循环用于遍历异步迭代器,在每次迭代时等待异步操作完成,并处理结果。
- 定义异步迭代器:使用
- 代码示例(Node.js环境下异步读取文件列表并打印文件名):
const fs = require('fs');
const path = require('path');
const { promisify } = require('util');
const readdir = promisify(fs.readdir);
async function* readFiles(dir) {
const files = await readdir(dir);
for (const file of files) {
const filePath = path.join(dir, file);
const stats = await promisify(fs.stat)(filePath);
if (stats.isFile()) {
yield file;
}
}
}
async function main() {
const dir = '.';
for await (const fileName of readFiles(dir)) {
console.log(fileName);
}
}
main();
在上述代码中:
readFiles
是一个异步生成器函数,它异步读取指定目录下的文件列表,并通过yield
返回每个文件名。main
函数使用for await...of
循环遍历readFiles
生成的异步迭代器,每次迭代等待文件名返回并打印出来。