美文网首页
嵌套的promise执行顺序

嵌套的promise执行顺序

作者: 小猪佩奇的王子 | 来源:发表于2019-11-30 10:43 被阅读0次

    外部promise有多个then链式调用,第一个then里面执行另一个promise,也带多个then链式调用,他们的执行顺序会是怎样?

    new Promise((resolve, reject) => {
        console.log("log: 外部promise")
        resolve()
    })
        .then(() => {
            console.log("log: 外部第一个then")
            new Promise((resolve, reject) => {
                console.log("log: 内部promise")
                resolve()
            })
                .then(() => {
                    console.log("log: 内部第一个then")
                })
                .then(() => {
                    console.log("log: 内部第二个then")
                })
        })
        .then(() => {
            console.log("log: 外部第二个then")
        })
    

    答案

    log: 外部promise
    log: 外部第一个then
    log: 内部promise
    log: 内部第一个then
    log: 外部第二个then
    log: 内部第二个then
    

    尝试解释

    1,new promsie是同步代码,立即执行
    2,外部promise第一个then需要等外部promise被resolve后才执行,外部promise立即被resolve,于是执行注册的then回调。此时外部第二then并未执行,因为他等待的是外部第一个then返回的promise
    3,进入外部第一个then,回调里面是一个promise,执行内部promise时,同样两个then链式调用,内部第一个then执行后,内部promise算执行完,返回一个新的promise给内部第二then用
    4,外部第一个then执行完且有返回值,进入外部第二then
    5,之后执行内部第二then

    看一个例子

    var p = new Promise((resolve, reject) => {
        resolve("good")
    })
    p.then(x => console.log("x:1", x))
    p.then(x => console.log("x:2", x))
    

    p这个promise注册了两个then,注意跟链式调用then的区别,这个就像发布订阅模式,有两个监听者,resolve时,这两个then同时执行,看完这个应该对上面理解有帮助

    相关文章

      网友评论

          本文标题:嵌套的promise执行顺序

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