【问题标题】:Unable to store result value from a tesseract function to a global variable inside an asynchronous function无法将 tesseract 函数的结果值存储到异步函数内的全局变量中
【发布时间】:2019-07-19 09:36:37
【问题描述】:

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

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

(async () => {

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

})();

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

【问题讨论】:

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


    【解决方案1】:

    如果您使用异步操作,例如Promisecallbackasync-await,您将无法再使用同步流。

    这样想,异步函数是将来会完成的操作,你想从中获得一些价值,然后在第一个异步函数完成之前你无法获得价值。

    话虽如此,如果你不想使用 Promise 链,你 CAN 使用 Promises(似乎)喜欢同步函数。所以你需要promisifytesseract.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);
      }
    })();
    

    编辑:检查代码后sn-p:

    const utils = require('util');
    (async () => {
      const browser = await puppeteer.launch({headless: false})
      const page = await browser.newPage()
      const tessProcess = utils.promisify(tesseract.process);
      await page.setViewport(viewPort)
      await page.goto('example.com')
      await page.screenshot(options)
      const text = await tessProcess('new.png');
      //YOU CAN USE text HERE/////////////
      await page.$eval('input[id=companyID]', (el, value) => el.value = value, text);//here too
    
      await browser.close()
    })()
    

    【讨论】:

    • 那么是不是不能将这个文本值存储在另一个变量中并在另一个函数中再次使用它?
    • 只有在第一个函数完全执行后才可以。否则它将为空。您应该查看有关异步函数的资源。
    • 但是,如果您可以在问题中指定您希望如何使用函数中的文本,那么我可以提供帮助。
    • 这里是一个代码 sn-p,我用 puppeteer 截取一个验证码,然后用 tesseract 解决它。现在我想使用这个处理过的文本再次输入验证码输入字段以提交表单。 jsfiddle.net/df7bnk2h/2
    • 编辑了答案,可以在page.$eval函数中使用text
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 2021-06-21
    • 2020-05-07
    • 1970-01-01
    • 2018-02-15
    相关资源
    最近更新 更多