【发布时间】:2020-06-09 12:27:27
【问题描述】:
我有两个版本的睡眠功能,一个正在等待解决另一个不是:
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 可以将函数的调用延迟给定的时间。 resolve() 不是函数吗? 我发现了这篇文章JavaScript promise resolving with setTimeout,这正是我在这里要问的,除了我正在使用异步等待。我也没有得到解释。有人可以向我解释为什么会这样吗?
【问题讨论】:
-
在
setTimeout(resolve('done'), ms);resolve('done')被执行,然后它的返回值作为setTimeout的第一个参数 -
另外,如果您只需要一个
sleep函数并且您并不真正关心它返回的内容,您可以执行new Promise((resolve) => setTimeout(resolve, 3000)),这将在一定数量之后调用resolve函数秒,而不是像现在这样立即调用它。 -
"Resolve() 不是函数吗?" - 不,表达式
resolve()的结果不是函数。resolve本身就是。 -
这正是我不确定的。我认为我作为 SetTimeout 函数的第一个参数给出的内容将在给定的毫秒后执行。但参数首先被评估,结果将在给定的毫秒后“执行”。谢谢
标签: javascript node.js async-await settimeout resolve