关于async函数的一个奇怪的问题
今天在看async函数时写了一个函数,原本的想法是执行Func,3秒钟之后返回一个promise对象的值为20,但是结果每次打印的值都不一样,基本在9~13,然后我用setInterval持续打印,每次的结果都在上次的结果上+1。。。
后来改了之后对了,但是对改动前这个函数的结果非常好奇,大家可以试一下改动前的函数,希望帮忙解答一下,跪谢~。
(PS:我在chrome控制台执行这个函数,不同页面的控制台下初始值和递增值都不一样,这又是为什么)
改动前:
async function Func(){
let b = 0
b = await setTimeout(function(){return 20},3000)
return b
}
setInterval(()=>{Func().then(res=>console.log(res))},1000)//依次为12,13,14,15...
改动后:
async function Func(){
let b = 0
b = await new Promise((resolve,reject)=>{
setTimeout(function(){resolve(20)},3000)
})
return b
}
Func().then(res=>console.log(res))// 20
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
因为
setTimeout()
不是异步函数,await
对它没作用的至于为什么是 12, 13, 14, 15,那是因为
setTimeout()
本身是有返回值的,通常是从 1 开始递增的数字。