来自页面评估的返回值(puppeteer,asnyc编程)

我有以下问题:我有一个木偶的页面评估,其中包括asynchronous部分。 我想把asynchronous部分的值返回给puppeteer,但是它只是返回undefined而不等待Promiseparsing。 有人如何解决这个问题?

我的示例代码:

const puppeteer = require('puppeteer'); async function testing(num) { const browser = await puppeteer.launch({ headless: false, ignoreHTTPSErrors: true }); const page = await browser.newPage(); const evaluating = await page.evaluate((num) => { //some synchrnous stuff (declaring some variablesand so on...) function lookForNumber(num) { if (num > 2) { var asyncstuff = setTimeout(function () { if (num > 10) { console.log('number is greater than 9'); var whatIwantToRetrun = 'ten'; return Promise.resolve(whatIwantToRetrun); //return here } if (num > 5 && num < 10) { console.log('number is samller than 10'); var whatIwantToRetrun = 'nine'; return Promise.resolve(whatIwantToRetrun); //return here } else { num++; lookForNumber(num) } }, 2000); } } lookForNumber(num) }, num) console.log(evaluating); // returns undefined before function has finished } testing(4) 

木偶师例如:

 const result = await page.evaluate(() => { return Promise.resolve(8 * 7); }); console.log(result); // prints "56" 

Chromes API进行评估

根据这个链接和更新的API,木偶老手总是评估代码,如果评估是一个承诺,等待承诺解决和返回承诺价值。

提前感谢任何帮助!

编辑:我想通了!

解决我的问题:

 const puppeteer = require('puppeteer'); let date = require('date-and-time'); async function testing(num) { const browser = await puppeteer.launch({ headless: true, ignoreHTTPSErrors: true }); const page = await browser.newPage(); await console.log('starting evaluation'); let now = new Date(); let time = date.format(now, 'YYYY/MM/DD HH:mm:ss'); console.log(time); const test = await page.evaluate(async (num) => { console.log('starting evaluation'); //some synchrnous stuff (declaring some variablesand so on...) function lookForNumber(num) { return new Promise((resolve, reject) => { if (num > 2) { var asyncstuff = setTimeout(function () { if (num > 10) { console.log('number is greater than 9'); var whatIwantToReturn = 'ten'; resolve(whatIwantToReturn); } if (num > 5 && num < 10) { console.log('number is samller than 10'); var whatIwantToReturn = 'nine'; resolve(whatIwantToReturn); } else { num++; lookForNumber(num) } }, 5000); } }); } var returnvalue = await lookForNumber(num); return returnvalue; }, num) console.log(test); now = new Date(); time = date.format(now, 'YYYY/MM/DD HH:mm:ss'); console.log(time); await browser.close(); } testing(6)