gpt4 book ai didi

javascript - 将带有resolve和reject的promise转换为异步函数的正确方法(puppeteer)

转载 作者:太空宇宙 更新时间:2023-11-04 01:41:44 24 4
gpt4 key购买 nike

所以我对异步函数和 promise 不熟悉,想象一下这样的 promise (请忽略语法错误)

await new Promise(async (resolve, reject ) => {
const page = await browser.newPage();

await page.goto('https://example.com').catch( ()=>reject('ERROR -> LINK 1 TIMEOUT '));
// INSERT USERNAME AND PASSWORD
await page.$eval('form', form => form.submit()).catch( ()=>reject('ERROR -> FORM SUBMIT ERROR '));

if( await page.$("#username"))
{

reject(" ERROR -> LOGIN FAILED !!!!!!!!!!!!!! ");
}




await page.waitForSelector('#xxx').catch( ()=>reject('ERROR -> WAITING FOR ELEMENT TIMEOUT '));

var scraped_data = // dop some page evaluate and scrap data;

resolve(scraped_data);

}).then(function(scraped_data){

await page.close();
console.log('all done');
insert_data_in_databas(scraped_data);

})
.catch(function(error){

console.log(' tab failed : ');
console.log(error);
});

我想将其转换为异步函数...执行此操作的正确方法是什么?我应该把它们全部放在 try/catch block 中吗

async function do_stuff(){

try {
const page = await browser.newPage();
await page.setViewport({ width: 1000, height: 1100});
await page.goto( 'https://example.com' );
// INSERT USERNAME AND PASSWORD
await page.$eval('form', form => form.submit());
await page.waitForSelector('#xxx');
var scraped_data = // dop some page evaluate and scrap data;
await page.close();
console.log('all done');
insert_data_in_databas(scraped_data);
}
catch (e) {
await page.close();
console.log('error');
console.log(e);
}
}

当出现错误时,我该如何拒绝,以便其余代码不会执行?我可以在 catche block 中添加自定义错误文本吗,例如

ERROR -> FORM SUBMIT ERROR 

我应该怎么做

  if( await page.$("#username"))
{

reject(" ERROR -> LOGIN FAILED !!!!!!!!!!!!!! ");
}

这不是 try/catch 中的实际错误(我的意思是它不是代码错误)?

------------------------------------------ 编辑 --------------------

我试过了

async function open_tab(){

try {
const page = await browser.newPage();
await page.setViewport({ width: 1000, height: 1100});
await page.goto( 'https://google.com' );
await page.waitForSelector('#xxx').catch(()=> { throw new Error('ERROR -> LOGIN FAILED')});
await page.close();
console.log('all done');
}
catch (e) {
console.log('error');
console.log(e);
await page.close();

}
}

它几乎可以工作,但我无法关闭我得到的 catch block 中的选项卡

UnhandledPromiseRejectionWarning: ReferenceError: page is not defined

并且选项卡保持打开状态,这并不理想

最佳答案

不应该有新的 Promise,因为 Promise 已经存在并且可以链接。

如果应在 async 函数中拒绝结果 promise ,则为:

if (await page.$("#username")) {
throw new Error('ERROR -> LOGIN FAILED');
}

应该是

let page;
try {
page = await browser.newPage();

而不是

try {
const page = await browser.newPage();

关于javascript - 将带有resolve和reject的promise转换为异步函数的正确方法(puppeteer),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52671773/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com