结论:async函数return的是一个promise对象,也就是说,会将你想返回的数据,包裹在一个promise的resolve里面*
想在fun3里面取得fun1里面的resolve数据,下面的写法是错误的
//原本这样写(这样写是错误的)
function fun1() {
return new Promise((resolve,reject) => {
resolve('fun1')
})
}
async function fun2() {
const fun1Data = fun1()
return fun1Data
}
function fun3() {
const fun2Data = fun2()
console.log('fun2Data',fun2Data)
}
fun3()
原因就是:async函数return的是一个promise对象,也就是说,会将你想返回的数据,包裹在一个promise的resolve里面
例如:
async function fun2() {
return 123
}
function fun3() {
const fun2Data = fun2()
console.log('fun2Data',fun2Data)
}
fun3()//打印输出=>fun2Data Promise { 123 }
所以最上面写法错误的原因就是:fun2()也是一个promise对象,fun3()执行时,遇见异步函数,放进执行队列,不等待它执行完成,而直接执行后面的console.log
正确写法:
function fun1() {
return new Promise((resolve,reject) => {
resolve('fun1')
})
}
async function fun2() {
const fun1Data = await fun1()
return fun1Data
}
async function fun3() {
const fun2Data = await fun2()
console.log('fun2Data',fun2Data)
}
fun3()//打印输出=>fun2Data fun1