promise 为什么下面两段代码,执行顺序会不同

题目描述

为什么下面两段代码,执行顺序会不同

相关代码

function light(color, second) {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            console.log(color)
            resolve()
        }, second * 1000)
    })
}

let list = [
    {
        color: 'red',
        time: 3
    },
    {
        color: 'green',
        time: 2
    },
    {
        color: 'yellew',
        time: 1
    }
]

function orderLights(list) {
    let promise = Promise.resolve()

    list.forEach(item => {
        // promise.then(function() {
        // return light(item.color, item.time)
        // })
        promise = promise.then(function () {
            return light(item.color, item.time)
        })
    })
}
orderLights(list)
阅读 1.3k
1 个回答

区别在于第一段代码,list中的数据都承接于Promise.resolve(),那么同步代码执行完成后,会按照red、green、yellew的顺序执行微任务,但是他们各自的微任务中又添加了3/2/1s的宏任务,那按照顺序就是等待时间短的宏任务先执行。

第二段代码,每一个promise都承接于list中上一个的promise,也就是上一个promise状态resolve后才会执行下一个,无论上一个promise需要等待多久

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进