我目前使用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;
}