You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过循环串联Promise的then方法能否保证执行顺序?

关于Promise链式调用顺序的问题

我正在学习JavaScript,编写了以下代码:

const functions = [
    prom => {
        console.log(1)
        return prom
    },
    prom => {
        console.log(2)
        return prom
    },
    prom => {
        console.log(3)
        return prom
    }
]

let prom = new Promise((resolve, reject) => {
    resolve()
})

for(functionIndex in functions){
    prom = prom.then(functions[functionIndex])
}

代码运行正常,但我不确定是否总能按函数数组的顺序执行传入的函数,请问我的这一假设是否正确?

你的假设是完全正确的,这些函数一定会严格按照数组的顺序(1→2→3)依次执行,原因如下:

  • Promise的.then()机制决定了链式调用的顺序性:每一个.then()注册的回调函数,都会等待前一个Promise的状态变为resolved之后才会被执行。你在循环中不断将prom更新为prom.then(...),本质是构建了一条严格的Promise执行链,只有前一个回调执行完成,才会触发下一个.then()中的函数。
  • 你使用的for...in遍历纯元素数组时,会按数组索引的升序(0、1、2)依次获取函数,不会出现乱序的情况(只要你没有给数组添加非索引类型的自定义属性)。

额外补充:哪怕你的数组中的函数返回的是新的异步Promise(比如包含API请求、定时器等操作),链式调用依然会保证执行顺序——.then()会等待当前回调返回的Promise完成后,再执行下一个回调函数。

内容的提问来源于stack exchange,提问作者Axel Carrère

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 01:35:25