так что я новичок в асинхронных функциях и обещаниях, представьте, что это многозначно (прошу игнорировать синтаксические ошибки)
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, например
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, например
ERROR -> FORM SUBMIT ERROR
как мне сделать это
if( await page.$("#username"))
{
reject(" ERROR -> LOGIN FAILED !!!!!!!!!!!!!! ");
}
, который не является действительной ошибкой (я имею в виду, что это не ошибка кода) в try /катче?
------------------------------------------ изменить --------------------
я попробовал
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();
}
}
он почти работает, но я не могу закрыть вкладку в блоке перехвата яполучить
UnhandledPromiseRejectionWarning: ReferenceError: page is not defined
и вкладка остается открытой, что не идеально