gpt4 book ai didi

javascript - NodeJS Html-pdf : fs. readfilesync 如何异步/等待

转载 作者:行者123 更新时间:2023-12-03 00:17:34 24 4
gpt4 key购买 nike

我在创建 html-pdf 文档时遇到问题。问题在于,代码通常运行速度太快才能完成 pdf 文档创建过程。该过程包括通过替换 Html 文件中的占位符来构建 HTML 字符串。下面您可以看到代码之后发生的情况。

                            Object.keys(setter).forEach(function(element, key, _array) {
var regex = new RegExp(element, "g");

data = data.replace(regex, setter[element])
})

var result = data;

fs.writeFile(mergeFileRes, result, 'utf8', function (err) {
if(err) {
console.log(err);
return;
} else {

let html2 = fs.readFileSync(mergeFileRes, 'utf8');
let options = {
format: 'a4' ,
"directory" : "/tmp",
};

if(html2){
pdf.create(html2, options).toStream(function(err, stream2){
if(err) console.log(err);
stream2.pipe(res);

stream2.on('end', function () {
try{
fs.unlink(mergeFileRes)
console.log(3090, "deleted file");
}
catch (err){
console.log(3090, "Did not delete file");
}
});
});
} else {

}
}
});

我的问题是,在许多情况下,在 pdf.create 进程开始之前尚未创建 html2 变量。这可能是因为 readFileSync 需要很长时间才能完成。

我想知道如何解决这个问题。如何让 pdf.create 等待 readFileSync 完成并填充 html2 变量。

最佳答案

您可以使用fs.readFile异步读取文件,并且html2将在回调函数中可用。

Object.keys(setter).forEach(function(element, key, _array) {
var regex = new RegExp(element, "g");

data = data.replace(regex, setter[element])
})

var result = data;

fs.writeFile(mergeFileRes, result, 'utf8', function (err) {
if(err) {
console.log(err);
return;
} else {

fs.readFile(mergeFileRes, 'utf8', function(err, html2){
if (err) throw err;

let options = {
format: 'a4' ,
"directory" : "/tmp",
};

pdf.create(html2, options).toStream(function(err, stream2){
if(err) console.log(err);
stream2.pipe(res);

stream2.on('end', function () {
try{
fs.unlink(mergeFileRes)
console.log(3090, "deleted file");
}
catch (err){
console.log(3090, "Did not delete file");
}
});
});
});
}
});

关于javascript - NodeJS Html-pdf : fs. readfilesync 如何异步/等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54478441/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com