【发布时间】:2017-03-21 19:45:10
【问题描述】:
我正在尝试在 Javascript 中实现 pdf 字数统计。我遇到了使用 Promise 的 pdf.js。有没有办法等到脚本完成后再返回计数?我知道这与承诺的想法背道而驰,但是那里的其他 js pdf 阅读器有时会产生一堆乱码或什么也不返回。在其当前形式中,该函数始终返回 0 字数。
function countWords(pdfUrl){
var pdf = PDFJS.getDocument(pdfUrl);
var count = 0;
pdf.then(function(pdf) {
var maxPages = pdf.pdfInfo.numPages;
for (var j = 1; j <= maxPages; j++) {
var page = pdf.getPage(j);
var txt = "";
page.then(function(page) {
var textContent = page.getTextContent();
textContent.then(function(page){
for(var i=0;i<page.items.length;i++){
txtadd = page.items[i].str
txt += txtadd.replace(/[^a-zA-Z0-9:;,.?!-() ]/g,'');
}
count = count + txt.split(" ").length;
})
})
}
return count;
});
}
【问题讨论】:
-
您需要反转您的流程,即需要
count的逻辑必须位于遵循此计数计算的“then”中。 -
我该怎么做?我是否将此方法变成一个对象并在其上调用“then”?这是我从 Spring.io 得到的一些代码,这是你的意思吗? var greetingPromise = sayHello(); greetingPromise.then(function (greeting) { console.log(greeting); // 'hello world' });
-
类似的东西。基本上,您的计数方法返回一个 Promise(而不是计数本身),计数已解决 (
resolve(count))。接下来,向返回的 promise 添加一个 .then 块,并使用 then 块中的 count 做一些事情。 -
我在哪里返回承诺?我现在在 pdf.then 子句之后添加了以下返回: return Promise.resolve({ then: function(onFulfill, onReject) { onFulfill(count); } });我做错了,因为它返回的计数为 0。抱歉,我没有理解所有内容,我以前从未听说过承诺,文档让我感到困惑而不是开明,感谢您帮助我!
-
好的,等我有时间再添加一个简单的代码示例。