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