2021 年更新:已在2021 年 4 月提交的Nodejs文档中修复了歧义
编辑:这本质上是节点文档的问题。请参阅此处的讨论。
我正在尝试自节点 v12.12 以来添加的fs.Dir类:
// hello-world.js
const fs = require('fs');
(async function () {
const dir = await fs.promises.opendir(__dirname);
for await (const dirent of dir) {
console.log('name:', dirent.name, 'isDir:', dirent.isDirectory());
}
return dir.close();
})();
Run Code Online (Sandbox Code Playgroud)
$ node hello-world.js
Run Code Online (Sandbox Code Playgroud)
它似乎按预期工作,记录了目录中每个文件的信息(没有丢失任何一个),但最终它抛出(node:3218) UnhandledPromiseRejectionWarning: Error [ERR_DIR_CLOSED]: Directory handle was closed at Dir.close (internal/fs/dir.js:161:13). 我究竟做错了什么?
dir 对象的异步迭代器将在迭代完成时自动关闭 dir。这似乎没有记录,但您可以在此处的代码中看到这一点。
async* entries() {
try {
while (true) {
const result = await this[kDirReadPromisified]();
if (result === null) {
break;
}
yield result;
}
} finally {
await this[kDirClosePromisified]();
}
}
}
ObjectDefineProperty(Dir.prototype, SymbolAsyncIterator, {
value: Dir.prototype.entries,
enumerable: false,
writable: true,
configurable: true,
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
488 次 |
| 最近记录: |