一、调用以后返回新的promise实例
二、新实例的状态根据回调函数的返回值来决定
1、有返回值:
(1)如果返回一个promise,那么新promise实例的状态会根据返回的promise状态来改变
(2)如果返回一个普通值(非异常或promise),那么新promise实例的状态为fulfilled,value为该值
2、无返回值:
新的promise实例的状态为fulfilled,value为undefined
3、抛出异常:
如果抛出异常,那么新promise实例的状态为rejected,reason为抛出的异常
三、then方法和catch方法
then方法中的回调函数在根promise状态改变来时调用,onFulfilled和onRejected两个函数的执行对新的promise实例的影响相同。
catch方法可以在promise实例状态改变为rejected时调用,还可以捕获为捕获的异常(promise中的异常有冒泡性质),返回值对新的promise实例的影响和onFulfilled和onRejected一样。
在promise链式调用中,如果一个异常没有被捕获到,那么这个异常会一直冒泡,直到遇到onRejected或者catch方法
let MPromise = new Promise(()=>{
throw new Error('error')
}).then(()=>{},(reason)=>{
throw new Error('error returned in then')
}).then(()=>{},(reason)=>{
console.log('onRejected:' + reason)}
).catch((error)=>{
console.log('caught:' + error)
})