0

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

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

(async () => {

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

})();

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

4

1 回答 1

0

如果你使用异步操作,比如Promise, callbackasync-await你就不能再使用同步流了。

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

话虽这么说,如果您不想使用 Promise 链,则CAN使用Promises(似乎)像同步函数一样。aysnc-await所以你需要promisify这个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);
  }
})();

编辑:检查代码片段后:

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()
})()
于 2019-07-19T10:03:16.267 回答