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



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

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

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所做的那样。

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

这样你就可以

const { rename, appendFile } = require('fs').promises;
try {
await rename("${nombreHtml}.html");
await appendFile("${nombreHtml}.html", htmlSeparado);
} catch (error) {
console.log(error);
}

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

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

最新更新