无法写入文件NodeJS

时间:2018-07-19 16:23:27

标签: javascript node.js express fs

我以前几乎可以用完全相同的方式写入文件,但是现在给我带来了麻烦。我循环浏览此函数,以重置在函数末尾删除的变量(请参见下面的代码)。调用此函数的循环可以成功运行3-9次,然后总是在文件写入时中断,并显示以下错误:

Error: ENOENT: no such file or directory, open 'screenshots/item4/record/record.html'

注意:它并不总是item4。

总是成功创建目录,但是有时无法写入文件。这是代码:

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;
    });
};

1 个答案:

答案 0 :(得分:1)

@Heretic的评论清楚地提到writeFile默认情况下不返回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个返回promise的函数。因此,您不需要await的{​​{1}}和增量操作