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