关于promise的一个错误理解

最近在写代码的时候不小心犯了一个低级错误,在用axios封装http的请求去请求接口,在获取到后台返回的数据后,在请求的实例对象的then()方法中去获取本地缓存的一个对象,在某一种情况下该对象还没有获取到值,就直接对对象里边的某个值去进行判断了,当时认为这个对象一定会有值,但一直走的是catch()方法,后来经过检查发现是那个对象还没有获取到值,问题是解决了,但心中有一个疑惑。

在学习promise的时候,会看到这样一句话,Promise 的状态一旦改变,就永久保持该状态,不会再变了。

对,就是这个疑惑,已经进了then()方法了为什么then()方法里边报错catch()还有捕获到异常呢,说好的Promise 的状态一旦改变,就永久保持该状态,不会再变了呢?

后来就又看了一遍阮一峰老师的es6标准入门,发现已经写的很清楚了。

then方法指定的回调函数,如果运行中抛出错误,也会被catch方法捕获。

那么Promise 的状态一旦改变,就永久保持该状态,不会再变,是什么意思呢?

var p1  = new Promise((resolve,reject)=>{
    setTimeout(()=>{
      console.log('执行完成');
      reject(new Error('test'));
      resolve();
    })
  })
  p1.then((res)=>{
    console.log('then1')
  }).catch((err)=>{
    console.log('catch1')
  })

当上边的代码执行完会输出执行完毕和catch1,也就是当执行了reject后,状态就会改变,catch()方法就会捕获异常,then()方法就不会获取到值了,所谓promise的状态一旦改变,就永久保持该状态,不会再变了。与我遇到的在then()方法中出现错去,catch()方法也会捕获异常是不同的问题。

猜你喜欢

转载自www.cnblogs.com/xiyangnanxia/p/11039081.html