async await 问题

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
})
慕村9548890
浏览 225回答 2
2回答

MYYA

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

动漫人物

fn2函数返回值是undefinedsetTimeout内部的函数的返回值和fn2的返回值并没有直接关系啊await函数可以这样理解:调用后返回Promise.resolve(函数的返回值)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript