当多次从外部循环调用递归函数时,对递归的承诺处理

时间:2019-05-19 21:44:58

标签: javascript recursion promise pdf.js

我正在使用PDF.js显示多个pdf文件,对于单个文件来说,一切都很好,但是当我尝试打印多个文件时,文件页面却无法按顺序打印,问题出在诺言。

当我需要一起打印2-3个文件时,出现了称为循环和承诺问题的PDF打印机功能。

我在循环中使用了$.when(function name here).then(function (response){}),但问题仍然没有解决,我可以使用睡眠功能,但是睡眠并不是一个好的解决方案,因为文件可能要花一些时间,因此会增加加载时间。

这是代码

此数据变量包含多个文件

$.each(data, function(key, value){  
          $.when(load_files(value["file name"])).then(function(data){
                currPage = 1; //global variable
                numPages = 0; //global variable
                thePDF = null; //global variable
            });
        });

这是用于打印pdf文件的功能

function load_files(document_name){
    var url = 'document path '+document_name;
    //This is where you start
        PDFJS.getDocument(url).then(function(pdf) {
            //Set PDFJS global object (so we can easily access in our page functions
            thePDF = pdf;
            //How many pages it has
            numPages = pdf.numPages;
            //Start with first page
            pdf.getPage( 1 ).then( handlePagesCanvas );
        });
        return 1;
}


function handlePagesCanvas(page) {    
    var container = document.getElementById('document-reader');
    var viewport = page.getViewport( 1.0 );
    //We'll create a canvas for each page to draw it on
    var canvas = document.createElement( "canvas" );
    canvas.style.display = "block";
    var context = canvas.getContext('2d');

    canvas.height = viewport.height;  //1122;
    canvas.width = viewport.width;  //793

    //Draw it on the canvas
    page.render({canvasContext: context, viewport: viewport});

    //Add it to the web page

    $("#document-reader").append(canvas);
    //Move to next page
    currPage++;
    if ( thePDF !== null && currPage <= numPages ) {thePDF.getPage( currPage ).then( handlePagesCanvas );}

}

问题与promise链接有关,混淆了涉及循环和递归调用时如何管理promise。

它是重复的问题吗?不,关于SO的问题很少,但是在这个问题中,承诺用循环处理是可以的,但是它会调用导致问题的递归函数

0 个答案:

没有答案