gpt4 book ai didi

javascript - 为什么我不能直接在SetTimeout函数中调用resolve()来处理Promises

转载 作者:太空宇宙 更新时间:2023-11-03 22:44:50 24 4
gpt4 key购买 nike

我有两个版本的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com