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

解释代码:

正如你在上面看到的,我创建了一个wait()返回承诺的函数,在这个函数中,resolve()将立即执行,以及一个将在 5 秒后记录“a”消息的计时器。

我所期望的:

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

它实际上做了什么:

但是结果是如此不同,两条消息都立即同时记录,并且'a'在'b'之前,5秒还没有过去。大家能不能帮我解释一下,我不太明白,我认为我对then()方法的理解是错误的,所以请知道的帮我修复,非常感谢!

4

2 回答 2

2
  1. 你打电话wait()
  2. wait创建一个新的 Promise
  3. resolve() 立即解决该承诺,但该函数resolve出现在继续运行之前
  4. 你打电话console.log('a')(假设缺少)的是问题中的错字而不是真正的代码)记录a
  5. console.log(which is )的返回值undefined被传递给setTimeout(它什么都不做,因为它不是一个函数)。
  6. 功能结束
  7. 承诺解决发生
  8. then函数被调用
  9. console.log('b')日志b
于 2021-05-21T11:13:34.983 回答
-2

您只是在调用 setTimeout 时遇到了错误

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

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

于 2021-05-21T11:18:24.333 回答