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

Promise链式调用setTimeout时then方法早于异步函数执行问题排查

问题原因

你在hideLogoAnimation中返回的Promise没有调用resolve方法:

  • Promise执行器默认接收resolve、reject两个参数,只有主动调用resolve()时,Promise才会切换为完成状态,后续绑定的.then()回调才会执行。
  • 你当前的代码没有写resolve调用,这个Promise会一直处于pending状态,正常来说.then()里的代码应该完全不会执行;你观察到的.then()提前触发,大概率是你实际运行的代码中hideLogoAnimation没有正确返回Promise实例。
修正方案

修改hideLogoAnimation函数如下即可:

function hideLogoAnimation() {
    console.log('hideLogoAnimation')
    // 给Promise执行器加上resolve参数
    return new Promise((resolve) => {
        setTimeout(() => {
            logo_animation.classList.remove('fadein')
            logo_animation.classList.add('fadeout')
        }, 500)
        setTimeout(() => {
            logo_animation.classList.remove('show')
            speech_bubble_middle_bar.style.display = 'unset'
            speech_bubble_bottom_bar.style.display = 'grid'
            freeze_input = false
            // 所有动画隐藏逻辑执行完毕后调用resolve,触发后续then回调
            resolve()
        }, 750)
    })
}

修改后所有logo隐藏操作执行完成后才会运行.then()中的文本、按钮显隐逻辑,顺序就能符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 11:42:00