promise的.then返回的一个新promise,他的状态和值,有很多问题。
我一直是这么理解的:
新的promise 的状态取决于原promise的状态,值呢,有2种情况
- 如果原promise为resovel。那么值等于原promise的.then函数中的返回值,没有返回值就等于原promise的resolve值
- 如果原promise为reject, 那么值等于原promise的reject的值
而
Promise.reject('a error')
.then(res => console.log('res'), err => console.log('err'))
.then(res => console.log('res'), err => console.log('err'));
结果是:
err
res
上来状态就不对,不理解第二个为啥是res
网上找到的代码,可以参考这里:
如果then()方法中返回了一个参数值,那么返回的Promise将会变成接收状态。
如果then()方法中抛出了一个异常,那么返回的Promise将会变成拒绝状态。
如果then()方法调用resolve()方法,那么返回的Promise将会变成接收状态。
如果then()方法调用reject()方法,那么返回的Promise将会变成拒绝状态。
如果then()方法返回了一个未知状态(pending)的Promise新实例,那么返回的新Promise就是未知状态。
如果then()方法没有明确指定的resolve(data)/reject(data)/return data时,那么返回的新Promise就是接收状态,可以一层一层地往下传递。
参考文章
https://segmentfault.com/a/11...