嵌套的promise执行顺序

2019-11-30  本文已影响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同时执行,看完这个应该对上面理解有帮助

上一篇下一篇

猜你喜欢

热点阅读