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

时间:2019-02-01 11:18:55

标签: javascript node.js express mongoose html-pdf

我的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变量。

1 个答案:

答案 0 :(得分:1)

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

html2