javascript承诺的语法问题

javascript承诺的语法问题,javascript,pdfjs,Javascript,Pdfjs,我使用pdfjs读取pdf文件,并将其页面作为图像。加载所有图像后,我需要调用ajax来发送和从服务器获取详细信息。pdf中迭代页面的代码取自此处: 我在为promise编写语法时遇到了问题,promise将在获取上述所有必需细节后调用ajax函数 这是我的密码: getDataUrlsAndSizesFromPdf(file).then(proceedAndCheckOnServer(file)); const getDataUrlsAndSizesFromPdf = function(fi

我使用pdfjs读取pdf文件,并将其页面作为图像。加载所有图像后,我需要调用ajax来发送和从服务器获取详细信息。pdf中迭代页面的代码取自此处:

我在为promise编写语法时遇到了问题,promise将在获取上述所有必需细节后调用ajax函数

这是我的密码:

getDataUrlsAndSizesFromPdf(file).then(proceedAndCheckOnServer(file));

const getDataUrlsAndSizesFromPdf = function(file) {
    PDFJS.disableWorker = true;
    fileReader = new FileReader();
    fileReader.readAsArrayBuffer(file);

    return new Promise(function(resolve, reject) {
        fileReader.onload = function(ev) {   
            PDFJS.getDocument(fileReader.result).then(function (pdf) {
                var pdfDocument = pdf;
                var pagesPromises = [];

                for (var i = 0; i < pdf.pdfInfo.numPages; i++) {
                    var pageNum = i + 1;

                    pagesPromises.push(getImageUrl(pageNum, pdfDocument));
                }

                Promise.all(pagesPromises).then(function () {
                    console.log(pdfPagesInfo);

                    resolve();
                }, function () {
                    console.log('failed');

                    reject();
                });
            }, function (reason) {
                console.error(reason);
            });
        }
    });
}

function getImageUrl() {
    return new Promise(function (resolve, reject) {
        PDFDocumentInstance.getPage(pageNum).then(function (pdfPage) {
            var scale = 1;
            var viewport = pdfPage.getViewport(scale);

            var canvas = document.getElementById('dummy-canvas');
            var context = canvas.getContext('2d');
            canvas.height = viewport.height;
            canvas.width = viewport.width;

            var task = pdfPage.render({canvasContext: context, viewport: viewport})
            task.promise.then(function(){
                var sizesArr = {
                    height : viewport.height,
                    width : viewport.width
                }
                pdfPagesInfo.sizes[pageNum.toString()] = sizesArr
                pdfPagesInfo.images[pageNum.toString()] = canvas.toDataURL('image/jpeg');

                resolve();
            });
        });
    });
}

function proceedAndCheckOnServer() {
    ....
}
getDataUrlsAndSizesFromPdf(文件)。然后(proceedAndCheckOnServer(文件));
const getDataUrlsAndSizesFromPdf=函数(文件){
PDFJS.disableWorker=true;
fileReader=新的fileReader();
readAsArrayBuffer(文件);
返回新承诺(功能(解决、拒绝){
fileReader.onload=函数(ev){
getDocument(fileReader.result).then(函数(pdf){
var pdfDocument=pdf;
var pagesPromises=[];
对于(var i=0;i

我想要的是在从“getImageUrl()”获取所有详细信息时执行“ProceAndCheckOnServer()”。但目前,执行直接转到“proceedAndCheckOnServer()”,而无需等待“getDataUrlsAndSizesFromPdf”的承诺得到解决。我不熟悉javascript承诺。请帮助我了解语法。

您正在调用函数,而不是使用回调函数

调用
proceedAndCheckOnServer
,并将该函数的结果用作
然后
的参数

getDataUrlsAndSizesFromPdf(file).then(proceedAndCheckOnServer(file));
请尝试以下方法之一:

getDataUrlsAndSizesFromPdf(file).then(()=>proceedAndCheckOnServer(file));
或者使用
文件
解析您的
GetDataUrls和SizesFromPDF
承诺,并使用不带
()
的函数来管道化结果

getDataUrlsAndSizesFromPdf(file).then(proceedAndCheckOnServer);

避开这个!(你只需要在
fileReader.onload=
周围写一个
新的承诺,就像或)我的坏。我以前没注意到。
getDataUrlsAndSizesFromPdf(file).then(proceedAndCheckOnServer);