美文网首页
Promise 的三种状态,以及then、catch的链式调用

Promise 的三种状态,以及then、catch的链式调用

作者: 阿毛啊726 | 来源:发表于2020-11-03 15:30 被阅读0次

    promise的三种状态:pending resolved rejected
    1)pending:在过程中,没有结果,不会触发then和catch
    2)resolved:已经解决,触发then
    3)rejected:已经拒绝,触发catch

    var p=new Promise((resolve,reject)=>{})
    console.log(p);//Promise { <pending> }
    

    resolved状态 reject状态

    console.log(Promise.resolve(100));
    console.log(Promise.reject(100));
    

    then和catch状态改变
    then正常返回resolved,里面有报错返回rejected
    catch正常返回resolved,里面有报错返回rejected

     const p1=Promise.resolve().then(()=>{
         return 100
     })
     console.log(p1);//p1 返回resolved
     p1.then(()=>{//p1 resolved 可以执行then
         console.log(123);
     })
     const p2=Promise.resolve().then(()=>{
        throw new Error("then error")
     })
     console.log(p2);//p2返回rejected
    p2.then(()=>{ //p2是一个rejected,不能执行then
        console.log(456);
    }).catch(()=>{
        console.log("err");//可以触发这个
    })
    
    const p3=Promise.reject("my error").catch(err=>{
        console.log(err);
    })
    console.log(p3);//p3是一个reject,但是执行了catch,而且正常执行了,返回resolved
    p3.then(()=>{
        console.log("p3之后触发的then");//会执行
    })
    p3.catch(()=>{
        console.log("p3之后触发的catch");//不会执行
    })
    const p4=Promise.reject("my error").catch(err=>{
        throw new Error("err")
    })
    console.log(p4);//p4是reject,执行catch,但是catch中报错了,返回reject
    p4.then(()=>{
        console.log("p4之后触发的then");//reject不会执行then
    })
    p4.catch(()=>{
        console.log("p4之后触发的catch");//会执行
    })
    

    resolve---->then
    then 中是一个正常return ,得到resolve ,可以继续执行 .then里面的内容
    then 中是一个throw error,得到reject,不能执行后面的 .then
    rejected---->catch
    catch 中是一个正常return ,得到resolve可以继续执行 .then里面的内容
    catch 中是一个error,得到reject ,不能执行后面的 .then,可以执行catch

    eg1

    Promise.resolve().then(()=>{
        console.log(1);
    }).catch(()=>{
        console.log(2);
    }).then(()=>{
        console.log(3);
    })
    

    结果 1 3
    第一个then中成功了,就相当于得到了一个resolve,resolve执行then,不执行catch,2不执行,3执行

    eg2

    Promise.resolve().then(()=>{
        console.log(1);
        throw new Error("err")
    }).catch(()=>{
            console.log(2);
    }).then(()=>{
        console.log(3);
    })
    

    结果 1 2 3
    第一个then中有throw err 出错了,相当于reject,reject执行catch,所以catch里面的内容正常执行,catch正常执行了,相当于resolve,resolve会执行then

    eg3

    Promise.resolve().then(()=>{
        console.log(1);
        throw new Error("err")
    }).catch(()=>{
            console.log(2);
    }).catch(()=>{
        console.log(3);
    })
    

    结果 1 2
    第一个then执行,里面有err ,相当于reject,执行catch,catch成功执行了,相当于resolved,执行then,不执行catch,所以2执行,3不执行

    相关文章

      网友评论

          本文标题:Promise 的三种状态,以及then、catch的链式调用

          本文链接:https://www.haomeiwen.com/subject/zuzbvktx.html