请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

有个问题哈,promise的catch触发条件好像是捕捉到异常后触发的吧,不是因为执行reject才触发的catch

视频的好像是ajax请求异常了才会触发catch,而不是执行reject后触发的catch
getData(url)
.then(() => { }, () => {})
.catch(err => {})

我记的是resolve执行会触发then中的第一个参数函数,reject会触发then中第二参数函数
而caitch会捕捉执行过程中发生的错误,比如ajax请求中请求异常、变量为定义就使用等等,当然可以通过throw new Error(“xxx”)手动抛出异常错误

正在回答

2回答

catch 也会捕获到 rejcet 的报错,你可以亲自试试。

1 回复 有任何疑惑可以回复我~
  • 提问者 触发bfc #1
    是的,catch可以捕获所有能捕获到的错误,报错reject触发的
    但我犯了一个很大的错误,我以为所有错误catch都能捕捉到,使用了catch就没必要使用reject,我查阅后发现一些报错,比如异常报错,catch并不能捕获到
    回复 有任何疑惑可以回复我~ 2020-05-21 22:45:54
  • 双越 回复 提问者 触发bfc #2
    可以给一段代码,我具体看看。
    回复 有任何疑惑可以回复我~ 2020-05-22 07:50:11
  • 提问者 触发bfc 回复 双越 #3
    const getData = (url) => {
      return new Promise((resolve, reject) => {
        $.ajax({
          type: 'GET',
          url,
          success: (res) => {
            resolve(res)
          },
          error: (err) => {
            console.log('onerror')
            reject(new Error('reject error'))
            throw new Error('throw error')
          }
        })
      })
    }
    
    const url1 = '../data/json.json'
    
    getData(url1)
      .then((data) => {
        console.log('resolve ', data)
      }, (err) => {
        console.log('reject = ', err)
      })
      .catch((err) => {
        console.log('catch ', err)
      })
    我启动的本地服务,url1是个错误链接,请求404,所以会触发ajax的error的回调,在error回调里我分别:
    1、执行reject,参数是一个error对象
    2、通过throw抛出一个Error
    最后控制台结果只触发了then中传的reject处理函数,然后抛出一个错误throw error,并没有触发catch中的处理函数
    回复 有任何疑惑可以回复我~ 2020-05-23 22:06:30
提问者 触发bfc 2020-05-20 23:52:04

如果我说的是对的话,是不是在ajax请求错误回调onerror函数中执行reject(err)就是多余无用的

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信