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文件a
和b
,则仅在创buildb
时列出b
,并且在进行另一次调用之前b
不会列出。
我假设在调用callback函数时文件没有closures,只有在稍后调用fs.readdir
closures后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}); });