如何使节点编译器与fs的这两个操作一起使用?

时间:2019-12-27 23:04:23

标签: node.js

{{1}}

我尝试运行这两个操作,但它不起作用

2 个答案:

答案 0 :(得分:1)

fs.rename异步任务。

fs.rename完成执行之前,fs.appendFileSync已经尝试将数据追加到该时间尚不存在的html文件中。

  1. fs.rename ...正在等待回调
  2. fs.append ...失败
  3. fs.rename完成后,文件现在有了一个新名称。

您可能想将fs.appendFileSync放在fs.rename回调中,或切换到Promise。 (底部的示例) 应该起作用的示例:

fs.rename("${nombreHtml}.html",(err)=>{
  if (err) console.log(err)
  else {
    fs.appendFileSync("${nombreHtml}.html", htmlSeparado, () => { })
  }
})

顺便说一句,由于同步功能会阻塞事件循环,因此冻结服务器以处理该功能,从而使其无法处理其他任何请求-强烈建议不要使用filesystem的同步功能,因为一般用例,因为读/写/附加操作相当长。建议像使用fs.rename一样使用它们的异步版本,这些版本会返回回调或Promise。

fs具有一个内置的子模块,其功能与require('fs').promises可以访问的promises相同。

这样您就可以

const { rename, appendFile } = require('fs').promises;

try {
  await rename("${nombreHtml}.html");
  await appendFile("${nombreHtml}.html", htmlSeparado);
} catch (error) {
  console.log(error);
}

答案 1 :(得分:0)

我假设您想要一个模板字符串,以便变量将自己插入到字符串中:

fs.rename(`${nombreHtml}.html`,(err)=>{
                console.log(err)
            })
fs.appendFileSync(`${nombreHtml}.html`, htmlSeparado, () => { })