then/catch方法可以返回一个新的promise实例对象。then/catch方法指定的回调函数(执行)return的返回值可以决定这个新的promise实例对象的状态,这正是实现then方法链式调用的基础。
promise实例对象默认状态是pendding,可以改变自身状态。但普通的promise实例对象不会返回一个新的promise实例对象,因此在promise实例对象的执行器函数return一个结果是没有意义的。promise实例对象应该关注的是自身的状态改变。
new Promise((resolve, reject) => {
return Promise.resolve(1) //return一个成功状态的promise实例对象:promise实例状态依然是pendding。
})
.then(value => {
console.log('成功', value);
return 5
}, reason => {
console.log('失败', reason);
})
.then(value => {
console.log('成功hhh', value);
}, reason => {
console.log('失败', reason);
})
//无打印
//错误分析:认为promise实例对象也能返回一个新的promise实例对象,实际上这是then/catch方法的特点,和promise实例对象无关。promise实例对象的关注点应该是自身状态的改变,利用promise实例对象(执行器函数中)去return一个值去链式调用是没有意义的。promise实例对象可以改变自己的状态并且传递状态值。
new Promise((resolve, reject) => {
return 5 //return5
})
.then(value => {
console.log('成功', value);
return 5
}, reason => {
console.log('失败', reason);
})
.then(value => {
console.log('成功hhh', value);
}, reason => {
console.log('失败', reason);
})
//无打印