为什么一个解析函数嵌套在事件回调从来没有工作?



我目前使用puppeteer作为无头浏览器。上下文是,当我登录到目标网站时,它将导航到'https://poe.game.qq.com/my-account',所以我使用事件侦听器来侦听我的登录是否成功。下面是我的一段代码:

async function newBrowser(name, browsers) {
/**
* Start a browser...
*/
const loginPage = browser.newPage(); 
await loginPage.goto('some url');
console.log('Waiting for login...');
const loginPromise = new Promise( resolve => {
loginPage.on('load', () => {
if (loginPage.url()=='https://poe.game.qq.com/my-account') {
console.log('Login successful.');
resolve;
}
});
});
await loginPromise;
}

事实是,我的控制台实际上打印出"登录成功"。但是loginPromise从来没有被解决,所以我的函数newBrowser总是悬而未决。有什么问题吗?

你必须实际调用resolve();,而不仅仅是resolve;。它是一个函数,你必须调用它。

并且,您也没有显示您试图查看结果promise的位置,但是您必须等到它被解决后才能查看它,因为您试图查看promise,否则,它仍将处于挂起状态。注意,当你的代码到达await logionPromise时,newBrowser()将返回一个挂起的承诺,所以你不能立即查看从newBrowser()返回的承诺。相反,您必须执行await newBrowser()newBrowser().then(...)才能知道它何时实际完成。

嘿,你需要在函数中调用resolve回调函数,如resolve()

async function newBrowser(name, browsers) {
/**
* Start a browser...
*/
const loginPage = browser.newPage(); 
await loginPage.goto('some url');
console.log('Waiting for login...');
const loginPromise = new Promise( resolve => {
loginPage.on('load', () => {
if (loginPage.url()=='https://poe.game.qq.com/my-account') {
console.log('Login successful.');
resolve();
}
});
});
await loginPromise;
}

相关内容

  • 没有找到相关文章