![](/img/trans.png)
[英]Node.js - Trying to embed callback function inside a callback function
[英]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.