我正在使用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的问题很少,但是在这个问题中,承诺用循环处理是可以的,但是它会调用导致问题的递归函数