为了账号安全,请及时绑定邮箱和手机立即绑定

async await 问题

async await 问题

慕勒3428872 2019-04-27 17:16:57
async返回的就是Promisereturn就相当于Promise.resolve()await等待如果是Promise就会终止异步,等待Promise,请问一下下面两个写法,为什么会打印不同functionfn1(){returnnewPromise((resolve,rejec)=>{setTimeout(()=>{resolve(1)},2000)})}fn1().then(data=>{console.log(data)//1})asyncfunctionfn2(){setTimeout(()=>{//这里的return不是相当于resolve(2)return2},2000)}fn2().then(data=>{console.log(data)//直接执行打印undefined})
查看完整描述

2 回答

?
浮云间

TA贡献1829条经验 获得超4个赞

setTimeout回调函数里的return不等于resolve,setTimeout回调函数的返回值没有任何地方接收会被直接丢弃,fn2应该没有返回任何值,就是undefined。fn返回的Promise并没有等两秒,而是瞬间就resolve(undefined)。
async修饰的是fn2函数,只有fn2函数的返回值才会被包装为Promise对象,而setTimeout回调函数不是fn,它的返回值不会被Promise包装。
                            
查看完整回答
反对 回复 2019-04-27
?
侃侃尔雅

TA贡献1801条经验 获得超16个赞

fn2函数返回值是undefinedsetTimeout内部的函数的返回值和fn2的返回值并没有直接关系啊
await函数可以这样理解:调用后返回Promise.resolve(函数的返回值)
                            
查看完整回答
反对 回复 2019-04-27
  • 2 回答
  • 0 关注
  • 398 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信