Node.js:fs.readdir不会返回由fs.writeFile写入的文件

我的应用程序

一个简单的Node.js http服务器,它通过调用POST /deploy在给定的目录中创build文件。 在写入文件后,我想使用console.log列出该目录中的所有文件。

为了创build文件( POST /deploy ),我打电话给:

 fs.writeFile(filename, content, 'utf8', callback(null, {'newFile': filename})); 

callback函数写入HTTP响应,并使用以下命令列出文件:

 fs.readdir(some_directory, (err, files) => { files.forEach(file => { console.log(file); // Do something with the file } } 

我的问题

新文件没有在callback中列出。 只有在我再次调用部署之后,才会列出上一个文件。 例如,如果我使用/deploy连续创build文件ab ,则仅在创buildb时列出b ,并且在进行另一次调用之前b不会列出。

我假设在调用callback函数时文件没有closures,只有在稍后调用fs.readdirclosures后fs.readdir看到文件。

我怎样才能调用callback函数只有在文件被正确closures,并可以使用fs.readdir列出?

我试过了什么

  • 阅读fs.close()手册。 它工作,但需要一个fd ,而不是文件名,所以我必须打开文件只是为了closures它,这似乎很麻烦:

    fs.open(fd,write,buffer){fs.cln(fd,callback(null,{'newFile':filename }));
    }); });

  • 在SO中寻找类似的问题

我认为这是你的问题:

 fs.writeFile(filename, content, 'utf8', callback(null, {'newFile': filename})); 

在上面的代码中,立即运行callback,而不用等待操作完成。 只有当你的callback(null, {'newFile': filename})实际返回一个函数作为callback调用时,它才会工作,我怀疑它。

这可能有助于:

 fs.writeFile(filename, content, 'utf8', () => callback(null, {'newFile': filename})); 

因为这里的callback()将在写操作完成后调用。 但是这还不够,因为你需要处理错误:

 fs.writeFile(filename, content, 'utf8', (err) => { if (err) { // handle possible errors } else { callback(null, {'newFile': filename}); } }); 

例如,如果您的callback可能会将错误作为您可以执行的第一个参数:

 fs.writeFile(filename, content, 'utf8', (err) => { if (err) { callback(err); } else { callback(null, {'newFile': filename}); } }); 

或者提早回来,你可以避免else

 fs.writeFile(filename, content, 'utf8', (err) => { if (err) { return callback(err); } callback(null, {'newFile': filename}); });