我正在创建一个读取PDF文件并将其转换为CSV的代码。代码一次正在读取文件。现在我试图一次读取多个文件,解释代码:
我有我的bin / www,它将通过命令行初始化代码:
Command: node bin/www oneArchive.pdf twoArchive.pdf
'use strict';
var Break = require('../core');
var node = process.argv[0];
var script = process.argv[1];
var length = process.argv.length;
var files = [];
if (length > 2) {
for (var i = 2; i < length; i++) {
files.push(process.argv[i]);
}
Break.extract(files);
}
我将传递一个数组,无论是一个存档,两个还是三个。所以,我创建了将文件名放在files数组中的逻辑,然后发送到Break.extract:
var Break = {
/**
* Responsible for extract the text from PDF, DOC or TXT files.
*
*/
extract: function(files) {
Extract.init(files);
},
};
我还有其他阶段,但我现在需要工作的是提取阶段,我发送一个带有文件名的数组,这个阶段只会读取文件中的文本。
我在这个阶段的需求是获取我在数组中发送的文件,成为另一个数组中的相同文本文件,然后发送到下一个阶段,这与现在不相关。
继续..
因此,发送到提取阶段:
var Extract = {
init: function(files, callback) {
this.files = files;
this.callback = callback;
SeparateFiles.init(files, Extract.result);
},
result: function(files) {
console.log(files);
}
};
这是我认为最重要的部分,我想分离文件并在结果方法中返回一个带有文本的数组。
所以:
SeparateFiles -> [File1.pdf, File2.pdf] -> LOGIC -> result method [Text1.pdf, Text2.pdf]
SeparateFiles:
var SeparateFiles = {
init: function(files, callback) {
for (var i = 0; i < files.length; i++) {
Types.read(files[i], 'pdf', callback);
}
}
};
我正在这里做一个循环,它将逐个读取,在我有的Types对象的read方法中:
/// ALL THE LOGIC TO BREAK THE FILE
When you finish, send to callback function, which is the result method.
这里的问题是我收到一个文本,另一个是文本,我希望在一个数组中同时收到它们。
这里的问题是循环我认为,我知道如何在两个文件中应用逻辑并在发送到结果方法之后,但我想应用逻辑,等待完成和发送到结果。
读取逻辑非常大,我不能粘贴在这里,但我有几种方法,在最后我只是将文本发送到结果方法。
答案 0 :(得分:0)
Javascript承诺?
如果您要进行复杂的异步操作,可能需要考虑使用Promises。虽然传统浏览器并没有广泛支持它们,但是有很多填充物可以填补这些空白。
使用promises,如果你想在继续之前等待两个单独的异步操作完成,你可以执行以下操作:
Promise.all([async1, async2])
.then(function() {
//Only when both async1 and async2 have been resolved
//(completed without failure) does this code execute
});
这是关于JS Promises的a great article
这是承诺的a polyfill(实际上在上面的文章中已经链接过了。)
希望这有帮助!