一、调用以后返回新的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方法

    1. let MPromise = new Promise(()=>{
    2. throw new Error('error')
    3. }).then(()=>{},(reason)=>{
    4. throw new Error('error returned in then')
    5. }).then(()=>{},(reason)=>{
    6. console.log('onRejected:' + reason)}
    7. ).catch((error)=>{
    8. console.log('caught:' + error)
    9. })