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

JavaScript函数顺序执行问题:Promise使用无效求助

问题解决:让函数在异步操作完成后执行

你的代码核心问题是:Promise没有等待delayGreet内部的setTimeout执行完成就直接resolve了,导致.then()里的函数会立刻运行,完全起不到延迟等待的效果。

下面是修正后的代码:

function delayGreet() {
    // 将delayGreet改造为返回Promise的函数
    return new Promise((resolve) => {
        setTimeout(() => {
            greet();
            resolve(); // 等greet执行完毕后,再标记Promise完成
        }, 1000);
    });
}

function greet() {
    para1.textContent = "Hi there!";
}

function dontDoUntilDelayIsComplete() {
    para2.textContent = "Please dont do before";
}

function callMethod() {
    delayGreet().then(dontDoUntilDelayIsComplete);
}

callMethod();

关键修改说明:

  • 让delayGreet返回Promise对象,把setTimeout包裹在Promise内部
  • 在setTimeout的回调里,先执行greet,再调用resolve(),确保只有当延迟操作完成后,Promise才会进入resolved状态,.then()里的目标函数才会触发执行

如果习惯更直观的写法,也可以用async/await语法实现:

function delayGreet() {
    return new Promise((resolve) => {
        setTimeout(() => {
            greet();
            resolve();
        }, 1000);
    });
}

function greet() {
    para1.textContent = "Hi there!";
}

function dontDoUntilDelayIsComplete() {
    para2.textContent = "Please dont do before";
}

async function callMethod() {
    await delayGreet(); // 等待delayGreet的异步操作完成
    dontDoUntilDelayIsComplete();
}

callMethod();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 09:02:06