You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么Puppeteer事件回调中嵌套的resolve函数始终无法生效?

问题原因
  • 核心错误:你没有调用Promise的resolve函数。代码中写的resolve;只是引用了这个函数对象,并没有执行它,所以Promise永远不会进入fulfilled状态,导致await一直处于等待状态。
  • 次要错误:browser.newPage()是异步方法,你没有加await关键字,后续对loginPage的操作可能出现未定义异常。
修复后的代码
async function newBrowser(name, browsers) {
    /**
    * 启动浏览器逻辑省略
    */

    // 补全await关键字
    const loginPage = await browser.newPage(); 
    await loginPage.goto('some url');
    console.log('等待登录完成...');

    const loginPromise = new Promise( resolve => {
        // 抽离监听逻辑为单独函数,方便后续移除监听避免内存泄漏
        const handlePageLoad = () => {
            if (loginPage.url() === 'https://poe.game.qq.com/my-account') {
                console.log('登录成功');
                // 调用resolve函数,可根据业务需要传入返回值
                resolve();
                // 触发完成后移除监听,避免重复执行
                loginPage.off('load', handlePageLoad);
            }
        }
        loginPage.on('load', handlePageLoad);
    });

    await loginPromise;
}
补充优化建议
  • 可以给Promise添加超时逻辑,避免登录失败、跳转异常时函数永远挂起
  • URL匹配建议用includes或者正则规则,避免跳转后URL带查询参数、hash时匹配失败

内容的提问来源于stack exchange,提问作者Vector

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 10:21:00