You need to enable JavaScript to run this app. JavaScript中如何实现a()执行完毕后再执行b()?
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中如何实现a()执行完毕后再执行b()?

问题核心

你的代码的根本问题是 setTimeout 本身不会返回 Promise 对象,await 对原生 setTimeout 无效。

await 只有在后面接 Promise 实例时,才会等待 Promise 状态从 pending 变为 fulfilled/rejected 后,再执行后续逻辑。你直接写 await setTimeout(...) 时,setTimeout 执行后会立刻返回一个数值类型的定时器ID,不属于 Promise,所以 await 会直接跳过等待,a() 函数会立刻执行完成进入已完成状态,触发后续的 then(b) 回调。此时定时器的回调还没到触发时间,所以会先打印 b,等300ms后定时器回调触发才会打印 a。

另外你代码里的 await console.log(xxx) 写法也没有实际作用,console.log 是同步方法,返回值不是 Promise,加 await 不会产生等待效果。

修复方案

首先把定时器封装成 Promise 版本:

// 封装基于Promise的延迟方法
function delay(ms) {
  return new Promise(resolve => setTimeout(resolve, ms))
}

再修改你的业务代码:

async function a() {
  await delay(300)
  console.log('a')
}

function b() {
  console.log('b')
}

a().then(b)

修改后执行顺序就会符合预期,控制台先打印 a 再打印 b。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 08:57:00