Javascript 为什么这些关于计时器(setTimeout())的代码是这样运行的then()方法?
解释代码: 正如您在上面所看到的,我创建了一个Javascript 为什么这些关于计时器(setTimeout())的代码是这样运行的then()方法?,javascript,promise,frontend,settimeout,asynchronous-javascript,Javascript,Promise,Frontend,Settimeout,Asynchronous Javascript,解释代码: 正如您在上面所看到的,我创建了一个wait()函数来返回一个承诺,在这个函数中,resolve()将立即执行,一个计时器将在5秒后记录“a”消息 我所期望的是: 因此,我所期望的是执行then()方法,它立即移动到then()方法,因此它将从这里记录“b”消息。由于5秒计时器在后台等待,在Web API中,“a”消息将记录在“b”消息之后 它实际上做了什么: 但结果是如此不同,两条消息立即同时记录,并且“a”在“b”之前,5秒还没有过去。你们能帮我解释一下吗,我真的不明白,我认为我对
wait()
函数来返回一个承诺,在这个函数中,resolve()
将立即执行,一个计时器将在5秒后记录“a”消息
我所期望的是:
因此,我所期望的是执行then()
方法,它立即移动到then()
方法,因此它将从这里记录“b”消息。由于5秒计时器在后台等待,在Web API中,“a”消息将记录在“b”消息之后
它实际上做了什么:
但结果是如此不同,两条消息立即同时记录,并且“a”在“b”之前,5秒还没有过去。你们能帮我解释一下吗,我真的不明白,我认为我对then()
方法的理解是错误的,所以如果你们知道,请帮我修复,非常感谢
wait()
等待
创建新承诺resolve()
立即解析该承诺,但函数resolve
出现在“继续运行”中,然后再对此执行任何操作console.log('a')
(假设缺少的)
是问题中的一个输入错误,而不是真正的代码),它记录a
console.log
(未定义的setTimeout
)的返回值被传递给setTimeout
(因为它不是函数,所以不做任何事情)函数
console.log('b')
logsb
您只是在调用setTimeout时出错
const wait=function(){
返回新承诺(功能(解决、拒绝){
解决()
setTimeout(()=>console.log('a'),5000)
})
}
wait()。然后(()=>console.log('b'))
wrap console.log in a function虽然这段代码可能会回答这个问题,但提供关于如何和/或为什么解决这个问题的附加上下文将提高答案的长期价值。哦,非常感谢,我修复了我的问题,非常感谢你的朋友,现在代码正在像我预期的那样工作!
const wait = function () {
return new Promise(function (resolve, reject) {
resolve()
setTimeout(console.log('a'), 5000)
})
}
wait().then(() => console.log('b'))