无法写入文件 NodeJS
Cant write to file NodeJS
我以前能够以几乎完全相同的方式写入文件,但现在却给我带来了麻烦。我循环遍历此函数,重置我在函数末尾删除的变量(请参见下面的代码)。调用此函数的循环成功运行 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;
});
};
@Heretic 的评论清楚地提到 writeFile
默认情况下不 return Promise
对象。
如果您使用的是最新版本的 Node
,您可以查看 util
库来保证您的功能
否则,如下更改函数即可解决问题:
function makeDirectory(path) {
return new Promise((resolve, reject) => {
mkdirp(path, function(err) {
if (err) return reject(err);
return resolve();
});
})
};
function saveFile(path, content) {
return new Promise((resolve, reject) => {
fs.writeFile(path, content, (err) => {
if (err) return reject(err);
return resolve();
});
})
};
请注意,您只能 await
return 一个 promise
的函数。因此,对于 delete
和增量操作
,您不需要 await
我以前能够以几乎完全相同的方式写入文件,但现在却给我带来了麻烦。我循环遍历此函数,重置我在函数末尾删除的变量(请参见下面的代码)。调用此函数的循环成功运行 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;
});
};
@Heretic 的评论清楚地提到 writeFile
默认情况下不 return Promise
对象。
如果您使用的是最新版本的 Node
,您可以查看util
库来保证您的功能
否则,如下更改函数即可解决问题:
function makeDirectory(path) {
return new Promise((resolve, reject) => {
mkdirp(path, function(err) {
if (err) return reject(err);
return resolve();
});
})
};
function saveFile(path, content) {
return new Promise((resolve, reject) => {
fs.writeFile(path, content, (err) => {
if (err) return reject(err);
return resolve();
});
})
};
请注意,您只能 await
return 一个 promise
的函数。因此,对于 delete
和增量操作
await