【问题标题】:Issue with syntax for javascript promisejavascript承诺的语法问题
【发布时间】:2019-07-11 22:52:07
【问题描述】:

我正在使用 pdfjs 读取 pdf 文件并将其页面作为图像获取。加载完所有图像后,我需要调用一个 ajax 来从服务器发送和获取详细信息。 pdf中迭代页面的代码取自这里:https://ourcodeworld.com/articles/read/405/how-to-convert-pdf-to-text-extract-text-from-pdf-with-javascript

在获取上述所有必需的详细信息后,我在编写将调用 ajax 函数的 promise 的语法时遇到问题。

这是我的代码:

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() {
    ....
}

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

【问题讨论】:

标签: javascript pdfjs


【解决方案1】:

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

proceedAndCheckOnServer 被调用,该函数的结果被用作then 的参数。

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

尝试以下方法之一:

getDataUrlsAndSizesFromPdf(file).then(()=>proceedAndCheckOnServer(file));
getDataUrlsAndSizesFromPdf(file).then(function(){ proceedAndCheckOnServer(file) });

或者使用file 解决您的getDataUrlsAndSizesFromPdf 承诺,并使用没有() 的函数来传递结果。

getDataUrlsAndSizesFromPdf(file).then(proceedAndCheckOnServer);

【讨论】:

  • 我的错。我之前没有注意到。
猜你喜欢
  • 2019-12-06
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
  • 2021-03-16
  • 2021-10-07
  • 2017-03-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多