【问题标题】:Nested async functions variable scope [duplicate]嵌套的异步函数变量范围[重复]
【发布时间】:2019-08-21 07:56:42
【问题描述】:

我有这样的代码结构(包括套接字和 puppeteer):

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 变量?

【问题讨论】:

    标签: node.js async-await puppeteer


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-07-10
      • 2016-09-25
      • 2017-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-03
      • 2015-07-02
      • 2012-06-24
      相关资源
      最近更新 更多