(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>