问题 
所以我是异步函数和承诺的新手,想象一下这样的承诺(请忽略语法错误) 
- 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();
 
  复制代码 
 
 
 
 |