为什么我不能直接在 SetTimeout 函数中为 Promises 调用 resolve()
Why can I not call resolve() for Promises in SetTimeout Function directly
我有两个版本的休眠功能,一个正在等待解决,另一个不是:
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() 不是函数吗?
我发现这个 post 这正是我在这里要问的,除了我使用的是异步等待。我也没有得到解释。有人可以向我解释为什么会这样吗?
setTimeout(() => resolve('done'), ms);
这意味着 "create a function with the text () => resolve('done')
and pass it into setTimeout"。 setTimeout 将等待指定的时间,然后调用该函数。
setTimeout(resolve('done'), ms);
这意味着 "immediately call resolve('done')
and pass its result into settimeout"。来自 resolve 的 return 值为 undefined
,因此未定义被传递到 setTimeout。因此 setTimeout 没有函数到 运行 3 秒后。
我有两个版本的休眠功能,一个正在等待解决,另一个不是:
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() 不是函数吗?
我发现这个 post
setTimeout(() => resolve('done'), ms);
这意味着 "create a function with the text () => resolve('done')
and pass it into setTimeout"。 setTimeout 将等待指定的时间,然后调用该函数。
setTimeout(resolve('done'), ms);
这意味着 "immediately call resolve('done')
and pass its result into settimeout"。来自 resolve 的 return 值为 undefined
,因此未定义被传递到 setTimeout。因此 setTimeout 没有函数到 运行 3 秒后。