为什么这些关于定时器(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()
方法的理解是错误的,请知道的帮我修复一下,万分感谢!
- 你打电话给
wait()
wait
创建一个新的 Promise
resolve()
立即 解决了该承诺,但函数 resolve
出现在继续 运行 之前运行 =34=]
- 您调用
console.log('a')
(假设缺少的 )
是问题中的拼写错误,而不是实际代码),它记录 a
console.log
(即 undefined
)的 return 值被传递给 setTimeout
(它什么都不做,因为它不是一个函数)。
- 活动结束
- 承诺解决发生
- 调用了
then
函数
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'))
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()
方法的理解是错误的,请知道的帮我修复一下,万分感谢!
- 你打电话给
wait()
wait
创建一个新的 Promiseresolve()
立即 解决了该承诺,但函数resolve
出现在继续 运行 之前运行 =34=]- 您调用
console.log('a')
(假设缺少的)
是问题中的拼写错误,而不是实际代码),它记录a
console.log
(即undefined
)的 return 值被传递给setTimeout
(它什么都不做,因为它不是一个函数)。- 活动结束
- 承诺解决发生
- 调用了
then
函数 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'))