我有两个版本的 sleep 函数,一个正在等待解析,另一个则不等待:
function sleephelper1(ms) {
return new Promise(function(resolve) {
setTimeout(() => resolve('done'), ms);
})
}
function sleephelper2(ms) {
return new Promise(function(resolve) {
setTimeout(resolve('done'), ms);
})
}
然后我调用 sleephelper1 或 sleephelper2:
async function test(){
var test = await sleephelper1(3000);
console.log(test)
console.log("exit test function")
}
test()
第一个在解析前等待 3 秒。但 sleephelper2 无法正常工作。代码立即执行。 我认为 SetTimeout 可以将函数的调用延迟给定的时间。 solve() 不是一个函数吗? 我找到了这篇文章JavaScript promise resolving with setTimeout这正是我在这里要问的,除了我使用的是异步等待。我也没有得到解释。有人可以向我解释一下为什么会这样吗?
最佳答案
setTimeout(() => resolve('done'), ms);
这意味着“使用文本 () =>resolve('done')
创建一个函数并将其传递给 setTimeout”。 setTimeout 将等待指定的时间,然后调用该函数。
setTimeout(resolve('done'), ms);
这意味着“立即调用 resolve('done')
并将其结果传递给 settimeout”。从resolve返回的值是undefined
,所以undefined被传入setTimeout。因此 setTimeout 没有在 3 秒后运行的函数。
关于javascript - 为什么我不能直接在SetTimeout函数中调用resolve()来处理Promises,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60400243/