async和await执行问题,await究竟返回了什么

async function foo() {
      console.log('5');
      await bar();
      console.log('7');
    }
function bar() {
      return new Promise(() => {

          console.log('11')

      })
    }

执行foo()结果5,11
当bar函数改为:

async function bar() {
  console.log('11');
}

则输出:5,11,7
async不就是返回promise吗?为什么会出现这种差异。
如果bar改成:
function bar() {
  return new Promise((reslove) => {
      
      console.log('11')
      resolve()

  })
}
则会输出5,11,7

当bar函数为

function bar() {
       console.log('11');
  }

则也为5,11,7

阅读 4.9k
3 个回答
✓ 已被采纳新手上路,请多包涵
resolve函数的作用是,将Promise对象的状态从“未完成”变为“成功”(即从 pending 变为 resolved),在异步操作成功时调用,并将异步操作的结果,作为参数传递出去。如果不调用resolve(),Promise对象一直处在为完成状态。await 需要等待后边表达式有结果。(参考es6入门指南)
所以, 第一个例子中因为Promise对象一直没有成功,程序就没有往下执行了。
async 虽然返回值是Promise对象,但是async函数的return就相当于resolve()了,也可以看一下es6入门指南的说明
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题