我正在使用Node.js的“pdf-text”模块将pdf转换为字符串数组,然后从中获取特定元素。但问题是,只有当我在回调中时,我才能访问数据“块”。我想将它存储在一些全局变量中,以便我可以在不同的文件中使用它。我已经尝试在函数内部存储数组的元素,但没有运气。这是代码:
var pdfText = require('pdf-text');
var pathToPdf = "PDF FILE NAME";
var fs = require('fs');
var buffer = fs.readFileSync(pathToPdf);
var output;
pdfText(buffer, function(err, chunks){
if (err){
console.dir(err);
return;
}
console.dir(chunks);
output = chunks;
}
console.dir(output);
P.S。我是Node.js和JavaScript的新手,非常感谢。
先谢谢!
答案 0 :(得分:1)
但问题是,只有当我在回调中时,我才能访问数据" chunks"。
是的,这是正确的。您无法在数据可用之前访问数据,当数据可用时,将使用数据调用您的回调。
我想将它存储在一些全局变量中,以便我可以在不同的文件中使用它。
假设你这样做了。现在你有问题了。您在这些不同文件中的代码:如何知道数据准备好了?它赢了。
你需要一些方法来告诉数据准备就绪的代码。通过调用函数来告诉代码的方式。此时您不需要全局变量:当您在其他文件中调用该函数时,您将数据作为函数参数传递给它。
换句话说,不要在某个文件中使用全局代码,希望能够通过引用全局变量来使用chunks
数据。而是编写一个可以从回调中调用的函数,并将chunks
传递给该函数。
答案 1 :(得分:0)
当调用回调时,输出变量将仅使用“chunks”内容设置。
顺便说一句,你需要添加“);”在pdfText函数调用上的回调函数声明之后。
var pdfText = require('pdf-text');
var pathToPdf = "PDF FILE NAME";
var fs = require('fs');
var buffer = fs.readFileSync(pathToPdf);
var output;
pdfText(buffer, function(err, chunks){
if (err){
console.log(err);
return;
}
otherFunction(); // undefined
output = chunks;
otherFunction(); // chunks content
});
function otherFunction() {
console.log(output);
}
console.log(output); // undefined
关于js回调:https://www.tutorialspoint.com/nodejs/nodejs_callbacks_concept.htm
答案 2 :(得分:0)
如果您使用的是节点8,我相信您可以使用async-await功能。因此,您可以重构代码,使其如下所示:
var pdfText = require('pdf-text');
var pathToPdf = "PDF FILE NAME";
var fs = require('fs');
var buffer = fs.readFileSync(pathToPdf);
var output;
async function getPDF(buffer) {
pdfText(buffer, function(err, chunks){
if (err){
console.dir(err);
return;
}
return await chunks;
}
}
// you can get the chunks given the buffer here!
console.dir(getPDF(buffer));
我想将它存储在一些全局变量中,以便我可以在不同的文件中使用它。我已经尝试在函数内部将数组元素存储在变量中,但没有运气。
我认为您不能将块存储为全局变量,因为您需要export
块(例如module.exports = getPDF(buffer);
),这是同步的,而函数getPDF是异步的。所以你必须在同一个文件中使用它。我会做的是导入该函数,然后在不同的js文件中传递不同的缓冲区,其中需要不同的pdf。希望这可以帮助。