无法将结果值从tesseract函数存储到异步函数内部的全局变量

时间:2019-07-19 09:36:37

标签: node.js tesseract puppeteer tesseract.js asynchronous-javascript

我正在使用tesseract JS将图像转换为文本格式。转换成功,我可以在控制台中将其打印出来。但是我无法在功能范围之外获得此文本。

我尝试将文本分配给全局变量,然后打印它,但没有任何反应。

(async () => {

tesseract.process('new.png', (err, text) => {
    if(err){return console.log("An error occured: ", err); }
    console.log("Recognized text:",text);
    });

})();

需要能够在函数外部获取文本值,并在另一个异步调用中再次使用它。

1 个答案:

答案 0 :(得分:0)

如果使用异步操作,例如Promisecallbackasync-await,则不能再使用同步流。

像这样想,异步函数是将来将要完成的操作,您需要从中获得一些值,然后直到第一个异步函数完成后才能获取该值。

话虽如此,如果您不想使用Promise链,则CAN可以像同步函数一样使用Promises(似乎),就像同步函数一样。因此,您需要简化aysnc-await函数:

tesseract.process

编辑:检查代码段之后:

const utils = require('util');

(async () => {
  const tessProcess = utils.promisify(tesseract.process);
  try {
    const text = await tessProcess('new.png');
    console.log("Recognized text:", text);
  } catch (err) {
    console.log("An error occured: ", err);
  }
})();