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

为何Promise.then中return语句后的代码无法执行?

关于Promise链式调用的两个问题解答

先看你写的定时切换背景色的代码:

const colorChange = (color, delay) => {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            document.body.style.backgroundColor = color;
            resolve();
        }, delay)
    })
};

colorChange("red", 1000)
    .then(() => {
        return colorChange("blue", 1000);
        console.log("blue");
    })
    .then(() => {
        colorChange("yellow", 1000);
        console.log("yellow");
    })

问题1:为什么return colorChange("blue",1000)后console.log("blue")不执行?

这和Promise无关,是JavaScript的基础语法规则:函数里的return语句会立即终止当前函数的执行,return后面的所有代码都不会被运行。你这里写了return之后,console.log("blue")属于return的后续语句,自然不会被执行。

如果想让console.log执行,只需要把它放到return前面:

.then(() => {
    console.log("blue");
    return colorChange("blue", 1000);
})

问题2:.then方法是否只能在return语句后写一行代码?

当然不是。.then的回调函数就是普通的JavaScript函数,你可以在里面写任意多行代码,只要记住:如果需要让下一个.then等待当前异步操作完成,就要在回调函数里return对应的Promise对象。

比如你可以写多行逻辑再return:

.then(() => {
    console.log("即将切换背景色为蓝色");
    // 这里可以加任意逻辑,比如判断、变量处理
    const isAllowed = true;
    if (isAllowed) {
        console.log("切换条件满足");
    }
    return colorChange("blue", 1000);
})

甚至可以在return之前执行多个同步操作,只要最后return Promise来维持链式调用的顺序即可。

内容的提问来源于stack exchange,提问作者zzh315

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 20:45:57