嵌套异步函数变量范围
Nested async functions variable scope
我有这样的代码结构(包括 sockets 和 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 变量 ?
.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
我有这样的代码结构(包括 sockets 和 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 变量 ?
.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