簡體   English   中英

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

[英]NodeJS Html-pdf: fs.readfilesync how to async/await

我的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");
                    }
                });
            });
        });
    }
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM