gpt4 book ai didi

node.js - 在 fs.opendir() 创建的 fs.Dir 上的异步迭代器之后 dir.close() 出错

转载 作者:行者123 更新时间:2023-12-04 14:11:38 26 4
gpt4 key购买 nike

2021年更新:
nodejs 中的歧义已得到修复 文档 April 2021 commit

编辑:这本质上是 Node 文档的问题。见讨论 here .

我正在尝试 fs.Dir自 Node v12.12 以来添加的类:

// 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();
})();

$ node hello-world.js
它似乎按预期工作,它记录了目录中每个文件的信息(没有丢失一个),但最后它抛出 (node:3218) UnhandledPromiseRejectionWarning: Error [ERR_DIR_CLOSED]: Directory handle was closed at Dir.close (internal/fs/dir.js:161:13) .我究竟做错了什么?

最佳答案

当迭代完成时,dir 对象的异步迭代器将自动关闭 dir。这似乎没有记录在案,但您可以在代码 here 中看到这一点。 .

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,
});

关于node.js - 在 fs.opendir() 创建的 fs.Dir 上的异步迭代器之后 dir.close() 出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63839910/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com