一、返回值
1、async函数返回的是一个promise对象,函数内return直接返回的值,或者new promise对象resolve出的值,会作为then((value)=》)传递出来,也就是async函数,是无法用同步方法拿到返回值的。
2、await 后应该跟一个promise对象,假如不是,会自动转换为promise对象,await的返回值 是promise对象的resolve传出的值,无论then了多少次。
3、假如 有这样一个函数
async function testAsyncReturn(){
let a = await new Promise((resolve,reject)=>{
setTimeout(()=>{console.log("1"),resolve("1")},5000)
})
let b = await new Promise((resolve,reject)=>{
setTimeout(()=>{console.log("2"),resolve("2")},5000)
})
return a+b
}
let c=testAsyncReturn().then((value)=>console.log(value));
console.log(c)
4、
let d=(async function e(){
。。。
return “666”
})()
d永远不会得到你想要的的666,因为d是一个promise对象
二、执行顺序
1、anync 会保证函数体内代码按照顺序执行,并且在await得到返回值前不会执行函数体内的下一条语句。
2、整个函数本身就是异步的,也就是说,anync函数内的代码顺序执行,但在异步期间,程序是会取执行函数体外的代码的。要保证有序代码的执行顺序,要不把代码写在函数体内,要么写在then方法内。