gpt4 book ai didi

javascript - 在 for 循环中等待 promise

转载 作者:行者123 更新时间:2023-12-02 17:58:15 24 4
gpt4 key购买 nike

我在处理整个异步内容时遇到了一些麻烦。我正在使用 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 连接到内容时,我想传递 contents 。如果我只是在最后一个结束 } 之前放置一个以 contents 作为参数的函数调用,那么它就会被提前调用。

最佳答案

尝试使用 promise :

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
});
})
}

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

关于javascript - 在 for 循环中等待 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20813279/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com