关于promise中使用try catch

为什么

async function main1() {
  try {
   await new Promise(() => {
      throw new Error('promise1 error')
    })
  } catch(e) {
    console.log(e.message);
  }
}

可以在catch中捕获错误

但是

function main1() {
  try {
    new Promise(() => {
      throw new Error('promise1 error')
    })
  } catch(e) {
    console.log(e.message);
  }
}

就捕获不呢

Promise是链式调用。第一个使用了语法糖async和await,这就导致所有的动作都暂停,等待Promise完成后再执行后续。
第二个函数运行的时候。遇到Promise会启动一个新的微操作,而本函数已经运行完毕。
如果要捕捉Promise的错误。应该以下方式操作:


function main1() {
      new Promise(() => {
        throw new Error('promise1 error')
      }).then((result)=> {
        console.log(result);
      }).catch((e)=>{
        console.log(e.message);
      });
  }
不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7634308
  • 你也可以参考下这篇文章:Promise中then的两个参数与catch的介绍
  • 除此之外, 这篇博客: Promise 基本语法中的 二、catch捕获 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    catch通常用于最后统一捕获,我我们try catch一样

    Error和eject都可以捕获

    result.then(function(img){
          // dosomthing
        }).then(function(){
          // dosomthing
        }).catch(function(error){
          console.log(error)
        })
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^