.then返回的新promise的结果状态由什么决定???

(1)简单表达:由.then内指定的回调函数(执行的回调函数)的返回结果来决定。

(2)详细表达:

1、回调函数没有返回值:返回一个状态resolved,value为undefined的新promise实例对象

2、回调函数如果抛出异常(throw new Error('error')):返回一个状态rejected,reason为抛出的异常值( new Error()内的值)的新promise实例对象

3、回调函数如果返回的是非promise的任意值:返回一个状态resolved,value为返回值的新promise实例对象

4、回调函数如果返回值是一个新的promise实例对象(这个实例对象状态改变以后再将状态结果向下一个then传递):这个被返回的promise实例对象的结果就会成为.then返回的新promise的结果

  <script>
    //情况1:调用.then方法的promise实例对象没有return任何值(返回成功状态:value值为undefined)
    let P1 = Promise.resolve(1) //成功

    P1
      .then(value => console.log('成功',value), reason => console.log('失败',reason)) //'成功',1 
      .then(value => console.log('成功',value), reason => console.log('失败',reason)) //'成功',undefined
      .then(value => console.log('成功',value), reason => console.log('失败',reason)) //'成功',undefined
    // 情况2: 调用.then方法的promise实例对象没有return一个非失败值( 返回成功状态: value值为return的值)
    let P2 = Promise.resolve(1) //成功

    P2
      .then(value => {
        console.log(value)
        return 99
      }, reason => {
        console.log(reason)
      }) //'成功',1 :return 99
      .then(value => console.log('成功'value), reason => console.log('失败',reason)) //'成功',99 :未return任何值
      .then(value => console.log('成功'value), reason => console.log('失败',reason)) //'成功',undefined

    //情况3:调用.then方法的promise实例对象return失败值(返回失败状态:value值为return的失败值)
    let P3 = Promise.resolve(1) //成功

    P3
      .then(value => {
        console.log('成功',value)
        return Promise.reject('error')
      }, reason => {
        console.log(reason)
      }) //'成功',1 :return Promise.reject('error'),即失败值'error
      .then(value => console.log('成功',value), reason => console.log('失败',reason)) //'失败',error :未return任何值
      .then(value => console.log('成功',value), reason => console.log('失败',reason)) //'成功',undefined
  </script>
原文地址:https://www.cnblogs.com/xjt31/p/14016210.html