编程语言
首页 > 编程语言> > javascript – 在for循环中等待承诺

javascript – 在for循环中等待承诺

作者:互联网

进入这整个异步的东西我有点麻烦.我正在使用pdf.js来读取pdf文件的内容.一切正常,但执行顺序给我带来了麻烦.这是我的代码:

function getText(data) {
    var contents = [];
    PDFJS.getDocument(data).then(function(pdf) {
        var numPages = pdf.pdfInfo.numPages;
        for (var i = 1; i <= numPages; i++) {
            pdf.getPage(i).then(function(page) {
                page.getTextContent().then(function(content) {
                    contents.concat(content.bidiTexts);
                })
            });
        }
    })
}

这是按预期工作的,但是,我想在处理所有页面并将其bidiTexts连接到内容时传递内容.如果我只是在最后一次关闭之前将一个带内容的函数调用作为参数,那么它会被提前调用.

解决方法:

尝试使用承诺:

function getText(data) {
    var contents = [];
    var promises = [];

    PDFJS.getDocument(data).then(function(pdf) {
        var numPages = pdf.pdfInfo.numPages;

        for (var i = 1; i <= numPages; i++) {
            var deferred = $.Deferred(); //Create a deferred object
            promises.push(deferred.promise()); //push promise to the list

            pdf.getPage(i).then(function(page) {
                page.getTextContent().then(function(content) {
                    contents.concat(content.bidiTexts);
                    deferred.resolve(); //resolve the deferred object
                })
            });
        }

        $.when.apply($,promises).then(function(){ //callback executed when all deferreds are resolved
            //do your task with contents
        });
    })
}

这只是一个如何使用promises的演示.在实际应用程序中,您必须使用deferred.reject来处理错误,并在第二次回调时处理它.$.when

标签:pdf-js,javascript,jquery
来源: https://codeday.me/bug/20191003/1846875.html