所以,我一直在研究文件系统模块,并且对于异步和等待我还是很陌生的 我不明白为什么我在这里出错?
websocket.session.id
为什么const fs = require("fs");
async function removeDir() {
await fs.readdir("./trash", (err, files) => {
if (err) throw err;
for(filename of files){
fs.unlinkSync(`./trash/${filename}`);
}
console.log("Cleared all files within directory");
});
await fs.rmdir("./trash", err => {
if (err) throw err;
console.log("Removed Dir");
});
}
removeDir();
在删除目录中的文件之前被执行,并且我收到一个错误消息,指出目录不为空。为什么不等我期望的那样工作呢?
答案 0 :(得分:1)
fs
模块中的 readdir
不会返回promise,因此在其上使用await
几乎没有效果,当然也不会使代码等到它已经完成了工作。 (这就是它具有回调的原因,因为这就是您知道的方法。)与rmdir
相同。
您可以改用较新的fs/promises API中的版本。
旁注:由于您从未声明过filename
,因此您的代码成为我所谓的The Horror of Implicit Globals的牺牲品。始终确保声明变量。 (在这种情况下,只需将const
放在filename
:for (const filename of files) {
的前面。)我还建议使用严格模式,以便尝试分配给未声明的标识符是它总是应该具有的错误是。如今,最好的方法是使用始终处于严格模式的JavaScript模块。但是您可以在脚本或旧式Node.js模块顶部使用"use strict";
。