【发布时间】:2018-12-27 21:14:40
【问题描述】:
我以前可以用几乎完全相同的方式写入文件,但是现在它给我带来了麻烦。我循环遍历这个函数,重置我在函数末尾删除的变量(参见下面的代码)。调用此函数的循环成功运行 3-9 次,然后它总是在文件写入时中断并出现此错误:
Error: ENOENT: no such file or directory, open 'screenshots/item4/record/record.html'
注意:并不总是第 4 项。
目录总是成功创建,但有时文件无法写入。代码如下:
async function save_and_erase() {
let path = await 'screenshots/item'+recordCount;
await makeDirectory(path);
await makeDirectory(path+'/base');
await makeDirectory(path+'/record');
await saveFile(path+'/base/base.html',storage['index_html']);
await saveFile(path+'/base/base.png',storage['index_screenshot']);
await saveFile(path+'/record/record.html',storage['record_html']);
await saveFile(path+'/record/record.png',storage['record_screenshot']);
await delete storage['record_html'];
await delete storage['record_screenshot'];
await recordCount++;
};
async function makeDirectory(path) {
mkdirp(path, function(err) {
if (err) throw err;
});
};
async function saveFile(path, content) {
await fs.writeFile(path, content, (err) => {
if (err) throw err;
});
};
【问题讨论】:
-
我认为
writeFile不会返回承诺,因此您在saveFile中的await将立即返回。你不是在等待mkdirp,尽管我怀疑它是否会返回一个承诺。我相信你必须使用utils.promisify让这些命令返回承诺......
标签: javascript node.js express fs