为什么在这种情况下删除目录会出现错误?

时间:2020-08-24 10:09:55

标签: javascript

所以,我一直在研究文件系统模块,并且对于异步和等待我还是很陌生的 我不明白为什么我在这里出错?

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(); 在删除目录中的文件之前被执行,并且我收到一个错误消息,指出目录不为空。为什么不等我期望的那样工作呢?

1 个答案:

答案 0 :(得分:1)

fs模块中的

readdir不会返回promise,因此在其上使用await几乎没有效果,当然也不会使代码等到它已经完成了工作。 (这就是它具有回调的原因,因为这就是您知道的方法。)与rmdir相同。

您可以改用较新的fs/promises API中的版本。


旁注:由于您从未声明过filename,因此您的代码成为我所谓的The Horror of Implicit Globals的牺牲品。始终确保声明变量。 (在这种情况下,只需将const放在filenamefor (const filename of files) {的前面。)我还建议使用严格模式,以便尝试分配给未声明的标识符是它总是应该具有的错误是。如今,最好的方法是使用始终处于严格模式的JavaScript模块。但是您可以在脚本或旧式Node.js模块顶部使用"use strict";