首页 > 解决方案 > 如何使节点编译器与 fs 的这两个操作一起工作?

问题描述

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

我尝试运行这两个操作,但它不想工作

标签: node.js

解决方案


fs.rename是一个异步任务。

fs.rename完成执行时,fs.appendFileSync已经尝试将数据附加到当时不存在的 html 文件中。

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

您可能想要放置fs.appendFileSyncfs.rename回调中,或者切换到 Promise。(底部的示例)应该工作的示例:

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

顺便说一句,因为同步函数会阻塞事件循环,因此会冻结服务器以处理该函数的时间,使其无法用于任何其他请求 -filesystem对于一般用例,不太推荐使用同步函数,因为读/写/append 操作相当长。建议使用它们的异步版本,它们返回回调或承诺,就像您使用fs.rename.

fs有一个内置的子模块,其功能与可以通过require('fs').promises.

这样你就可以

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

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


推荐阅读