嵌套异步函数变量作用域

时间:2019-03-30 16:06:13

标签: node.js async-await puppeteer

我具有以下代码结构(包括套接字和操纵p):

client.on('find', (url) => {
    console.log(url);                         // url == "google.ru"
    (async function(){
        await page.goto(url);                 // url == "google.ru"
        await page.evaluate(async () => {
            var response = await fetch(url);  // url == undefined
            var json = await response.json();
            return json;
        });
    })();
});

我尝试了一些变化(关闭等),但无法使其正常工作。如何正确传递 url 变量?

1 个答案:

答案 0 :(得分:2)

.evaluate回调函数在页面上下文中运行,而不是在主脚本上下文中运行,这就是url未定义的原因。

在回调内部,您可以访问浏览器全局范围中定义的任何variable

如果您想从url内部访问.evaluate,则可以将其作为参数传递。

page.evaluate(async (url) => {
    // browser context
    var response = await fetch(url);  
    var json = await response.json();
    return json;
}, url); // pass it as an argument