【发布时间】:2015-11-03 15:43:32
【问题描述】:
我有这段代码
module.exports = function(file, callback) {
var output, pdf, result, stderr;
output = '';
stderr = '';
result = [];
pdf = child_process.spawn('pdftotext', ['-layout', '-enc', 'UTF-8', file.name, '-']);
pdf.stdout.setEncoding('utf8');
pdf.stderr.setEncoding('utf8');
pdf.stdout.on('data', function(data) {
if (data) {
output += data;
}
});
pdf.stderr.on('data', function(data) {
if (data) {
stderr += data;
}
});
return pdf.on('close', function(code) {
var last_page, pages;
if (code !== 0) {
return stderr;
} else {
pages = output.split(/\f/);
if (!pages) {
return 'Nenhum texto foi encontrado';
}
last_page = pages[pages.length - 1];
if (!last_page) {
pages.pop();
}
file.text += pages;
return callback(file);
}
});
};
基本上,我使用 pdftotext bash 程序获取 PDF 的文本。
这个函数在Promise.map内部被调用,所以我需要返回一个新的文件数组,但是在返回之前,我需要调用回调,每个人都会负责其他的事情。
问题是:我怎样才能返回pdf.on('close', funct....) ??
在里面,我有 return callback(file); 每个都返回我想要的,但现在我需要从 pdf.on.... 返回相同的东西
谢谢。
【问题讨论】:
-
那么实际上你想为 pdf 的文本返回一个承诺?
-
你在用
result做什么?为什么不将pages视为一个数组?file长什么样子? -
我在一个并发 3000 的 Promise.map 中调用这个函数。所以当程序完成时,我想调用堆栈中的下一个承诺,它负责清理文本..问题是,我无法返回 EventEmitter @Bergi
-
是的,您不应该返回事件发射器!您需要从
Promise.map回调返回一个承诺。 -
这就是我正在做的codepen.io/anon/pen/bVjjeV?editors=001 函数 phase_one 将收到一个包含这样的对象的数组:{ name: 'name_of_file.pdf' },所以我想把里面的文本,因为实现这一点,我创建了 pdf 函数,它将一次接收一个 pdf 并使用 pdftotext 提取文本。
标签: javascript node.js pdf promise eventemitter