async await 问题

async 返回的就是 Promise
return 就相当于 Promise.resolve()

await 等待如果是 Promise 就会终止异步,等待Promise,

请问一下 下面两个写法,为什么会打印不同

function fn1(){
    return new Promise((resolve, rejec)=>{
      setTimeout(()=>{
        resolve(1)
      },2000)
    })
  }

  fn1().then(data=>{
    console.log(data) // 1
  })

  async function fn2(){
    setTimeout(()=>{

      //这里的return 不是相当于 resolve(2)
      return 2
    },2000)
  }

  fn2().then(data=>{
    console.log(data) //直接执行 打印 undefined
  })
阅读 1.9k
2 个回答

setTimeout回调函数里的return不等于resolve,setTimeout回调函数的返回值没有任何地方接收会被直接丢弃,fn2应该没有返回任何值,就是undefined。fn返回的Promise并没有等两秒,而是瞬间就resolve(undefined)。

async修饰的是fn2函数,只有fn2函数的返回值才会被包装为Promise对象,而setTimeout回调函数不是fn,它的返回值不会被Promise包装。

fn2 函数返回值是 undefined
setTimeout 内部的函数的返回值和 fn2 的返回值并没有直接关系啊

await 函数可以这样理解:
调用后返回 Promise.resolve(函数的返回值)

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题