node.js - 如何使节点编译器与 fs 的这两个操作一起工作?
问题描述
fs.rename("${nombreHtml}.html",(err)=>{
console.log(err)
})
fs.appendFileSync("${nombreHtml}.html", htmlSeparado, () => { })
我尝试运行这两个操作,但它不想工作
解决方案
fs.rename
是一个异步任务。
到fs.rename
完成执行时,fs.appendFileSync
已经尝试将数据附加到当时不存在的 html 文件中。
fs.rename
... 等待回调fs.append
... 失败fs.rename
完成后,文件现在有了新名称。
您可能想要放置fs.appendFileSync
在fs.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);
}
推荐阅读
- ruby-on-rails - React::ServerRendering::PrerenderError - Rails 5,React 预渲染问题
- http - 向 grpc-gateway 服务器发出请求时出现 HTTP2 PROTOCOL_ERROR
- ruby - Logstash Ruby 无效的转义字符语法
- bash - Shell 脚本在 crontab 中无法正常运行
- android - 如何与我的图书馆共享 NewRelic 实例
- angular - 需要相同库的两个项目
- python - 模块(文本提取 PDF 提取器)在控制台与 PyCharm 中运行时提供不同的输出
- canvas - 快速画布缩放
- javascript - 避免使用 web3 在 metamask 中显示“此 gas fee 已被建议”消息
- matrix - 如何从 txt 文件中读取数据?它是一个未知维度的矩阵,第一行是文本(实际上是时间戳和变量的名称)