繁体   English   中英

ReferenceError 尝试访问 node.js 中的 await 回调中的闭包变量

[英]ReferenceError trying to access closure variable inside await callback in node.js

(我浏览了类似的问题,但找不到我的问题的答案,所以在这里提问。)

为什么下面的代码给我错误“ReferenceError: myText is not defined”?

    async myFunction(myText: string)
    {
        await this.asyncThing.evaluate(() => {
            console.log(myText);  // error is thrown here
        });
    }

不知道为什么在调用 log 函数时闭包不应该仍然处于活动状态。 这种行为有解决方法吗?

看起来您正在使用 Puppeteer。 尽管您传递给evaluate的函数看起来像一个常规的闭包,但它实际上是序列化的并通过线路发送到浏览器。 这意味着它实际上并没有关闭/访问父作用域中的变量。 相反,您必须明确地将这些变量作为参数传递给evaluate函数:

async myFunction(myText: string)
{
    await this.asyncThing.evaluate((myTextInBrowser) => {
        console.log(myTextInBrowser);
    }, myText); // <- pass the variable in here
}

这在文档中没有很好地说明,但它在“将参数传递给 pageFunction:” https://pptr.dev/#?product=Puppeteer&version=v2.1.1&show=api-pageevaluatepagefunction-args

该变量在闭包内不可见,因为闭包没有参数。

考虑

await this.asyncThing.evaluate((myText) => {
    console.log(myText);
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM