JavaScript:变量在等待中未定义

JavaScript:变量在等待中未定义,javascript,node.js,promise,Javascript,Node.js,Promise,下面我有一个代码片段,它从StackOverflow的站点输出descriptionmeta标记。我的问题是,当我在一开始就显式定义常量url时,我收到一个错误,说url在页面内部。evaluate()未定义。我对JS中的变量作用域不是很熟悉,我可以知道为什么会出现这个错误以及如何修复它吗 const puppeteer = require('puppeteer'); const url = "https://stackoverflow.com/"; function ru

下面我有一个代码片段,它从StackOverflow的站点输出description
meta
标记。我的问题是,当我在一开始就显式定义常量
url
时,我收到一个错误,说
url
在页面内部。evaluate()未定义。我对JS中的变量作用域不是很熟悉,我可以知道为什么会出现这个错误以及如何修复它吗

const puppeteer = require('puppeteer');
const url = "https://stackoverflow.com/";

function run () {
    return new Promise(async (resolve, reject) => {
        try {
            const browser = await puppeteer.launch();
            const page = await browser.newPage();
            await page.goto(url);
            
            let temp = await page.evaluate(() => {
                let metaTag = document.querySelector('head > [name="description"]');
                const output = url + ": " + metaTag.getAttribute('content');
                return output;
            })

            browser.close();
            return resolve(temp);
        } catch (error) {
            return reject(error)
        }
    })
}

run().then(console.log).catch(console.error);

在理解JS中的变量范围时,这不是一个问题

page.evaluate
只是行为不正常,因为函数是在页面的上下文中计算的,而不是在定义它的上下文中计算的

如果要向其传递数据,请将其作为参数传递:

let temp = await page.evaluate((url) => {
    // ...
}, url)

在理解JS中的变量范围时,这不是一个问题

page.evaluate
只是行为不正常,因为函数是在页面的上下文中计算的,而不是在定义它的上下文中计算的

如果要向其传递数据,请将其作为参数传递:

let temp = await page.evaluate((url) => {
    // ...
}, url)