为什么这些关于定时器(setTimeout()),Promises 运行的then()方法的代码是这样的?

Why these codes about the timer(setTimeout()), the then() method of Promises running like this?

const wait = function () {
  return new Promise(function (resolve, reject) {
    resolve()
    setTimeout(console.log('a'), 5000)
  })
}
 
wait().then(() => console.log('b'))

解释代码:

正如你在上面看到的,我创建了一个 wait() 函数,它 return 一个 promise,在这个函数中, resolve() 将被立即执行,一个计时器将5 秒后记录 'a' 消息。

我的预期:

所以我期望 then() 方法将被执行,它立即移动到 then() 方法,因此它将从这里记录 'b' 消息。由于 5 秒计时器在后台等待,在 Web API 中,'a' 消息将在 'b' 消息之后记录。

它实际做了什么:

但结果却大相径庭,两条消息立即同时记录,'a' 在 'b' 之前,5 秒还没有过去。大家能不能帮我解释一下,我不是很明白,我觉得我对then()方法的理解是错误的,请知道的帮我修复一下,万分感谢!

  1. 你打电话给wait()
  2. wait 创建一个新的 Promise
  3. resolve() 立即 解决了该承诺,但函数 resolve 出现在继续 运行 之前运行 =34=]
  4. 您调用 console.log('a')(假设缺少的 ) 是问题中的拼写错误,而不是实际代码),它记录 a
  5. console.log(即 undefined)的 return 值被传递给 setTimeout(它什么都不做,因为它不是一个函数)。
  6. 活动结束
  7. 承诺解决发生
  8. 调用了then函数
  9. console.log('b') 日志 b.

你只是在调用 setTimeout 的方式上出错了

const wait = function() {
  return new Promise(function(resolve, reject) {
    resolve()
    setTimeout(() => console.log('a'), 5000)
  })
}

wait().then(() => console.log('b'))