问题
所以我是异步函数和承诺的新手,想象一下这样的承诺(请忽略语法错误)
- 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);
- });
- 我想把它转换成异步函数。。。怎么做才是正确的?我应该把它们都放在一个像
- 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);
- }
- }
复制代码
如果出现阻止其他代码执行的错误,我该如何拒绝?我可以在 catch 块中有自定义错误文本吗
错误->表格提交错误
我该怎么办
- 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();
- }
- }
复制代码
几乎可以使用,但我无法关闭塞子上的标签
UnhandledPromiseRejectionWarning:ReferenceError:页面未定义
标签保持打开状态,这并不理想
回答
不应该有新的 Promise,因为 Promise 已经存在并且可以被链接。
如果结果 promise 在 async 函数中被拒绝,则:
- if (await page.$("#username")) {
- throw new Error('ERROR -> LOGIN FAILED');
- }
复制代码
应该
- let page;
- try {
- page = await browser.newPage();
复制代码
代替
- try {
- const page = await browser.newPage();
复制代码
|