ES6中async函数的问题

一、返回值

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)
image

4、

let d=(async function e(){

。。。

return “666”

})()

d永远不会得到你想要的的666,因为d是一个promise对象

二、执行顺序

1、anync 会保证函数体内代码按照顺序执行,并且在await得到返回值前不会执行函数体内的下一条语句。

2、整个函数本身就是异步的,也就是说,anync函数内的代码顺序执行,但在异步期间,程序是会取执行函数体外的代码的。要保证有序代码的执行顺序,要不把代码写在函数体内,要么写在then方法内。

你可能感兴趣的:(ES6中async函数的问题)