关于async函数的一个奇怪的问题

发布于 2022-09-06 20:49:43 字数 759 浏览 10 评论 0

今天在看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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

软的没边 2022-09-13 20:49:43

因为 setTimeout() 不是异步函数, await 对它没作用的

  async function Func(){
        let b = 0
        b = await setTimeout(function(){return 20},3000)
        return b // 这一行并不会 3 秒后才执行,而是立即执行
      }
      
  setInterval(()=>{Func().then(res=>console.log(res))},1000)//依次为12,13,14,15...

至于为什么是 12, 13, 14, 15,那是因为 setTimeout() 本身是有返回值的,通常是从 1 开始递增的数字。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文