无法将 tesseract 函数的结果值存储到异步函数内的全局变量
Unable to store result value from a tesseract function to a global variable inside an asynchronous function
我正在使用 tesseract JS 将图像转换为文本格式。转换成功,我可以在控制台打印出来。但是我无法在函数范围之外获取此文本。
我试过将文本分配给全局变量然后打印它,但没有任何反应。
(async () => {
tesseract.process('new.png', (err, text) => {
if(err){return console.log("An error occured: ", err); }
console.log("Recognized text:",text);
});
})();
需要能够在函数外获取文本的值,并在另一个异步调用中再次使用它。
如果您使用异步操作,例如 Promise
、callback
、async-await
,您将不能再使用同步流。
这样想,异步函数是将来要完成的操作,你想从中得到一些值,然后在第一个异步函数完成之前你无法获得该值。
也就是说,如果您不想使用 Promise 链,那么如果您使用 aysnc-await
,您 CAN
使用 Promises
(看起来)就像同步函数一样。所以你需要承诺 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()
})()
我正在使用 tesseract JS 将图像转换为文本格式。转换成功,我可以在控制台打印出来。但是我无法在函数范围之外获取此文本。
我试过将文本分配给全局变量然后打印它,但没有任何反应。
(async () => {
tesseract.process('new.png', (err, text) => {
if(err){return console.log("An error occured: ", err); }
console.log("Recognized text:",text);
});
})();
需要能够在函数外获取文本的值,并在另一个异步调用中再次使用它。
如果您使用异步操作,例如 Promise
、callback
、async-await
,您将不能再使用同步流。
这样想,异步函数是将来要完成的操作,你想从中得到一些值,然后在第一个异步函数完成之前你无法获得该值。
也就是说,如果您不想使用 Promise 链,那么如果您使用 aysnc-await
,您 CAN
使用 Promises
(看起来)就像同步函数一样。所以你需要承诺 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()
})()