【发布时间】:2018-03-13 11:51:33
【问题描述】:
我遇到了以下问题: 我在 puppeteer 中有一个页面评估,其中包括异步部分。我想将异步部分的值返回给 puppeteer,但是,它只是返回 undefined 而无需等待 Promise 解决。有没有人怎么解决这个问题?
我的示例代码:
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"
根据this link 和更新的API,puppeteer 总是评估代码,如果评估是一个promise,则等待promise 解析并返回promise 值。
提前感谢您的帮助!
编辑:我想通了!
【问题讨论】:
-
我建议您重新编辑您的问题。并回答您自己的问题,然后将其标记为答案,这是允许的。
-
完成! (10 个字符)
标签: javascript node.js asynchronous evaluate puppeteer