89500297 2020-06-07
ES7语法糖,基于Promise,处理异步任务更加方便
函数的返回值为promise对象,promise对象的结果由async函数执行的返回值决定
/* async: async不一定需要await,但是await一定需要async 加了async之后,函数的执行结果默认返回一个Promise对象 */ async function f1() { return 1 } // console.log(f1())//Promise?{<resolved>: 1} //产生一个失败的promise async function f2() { // throw 1; return Promise.reject(2) } // console.log(f2()) //Promise?{<rejected>: 1}
右侧的表达式一般为promise对象,但也可以是其他的值
如果表达式是promise对象,那么返回的是promise成功的值
如果是其他的值,直接将此值作为await的返回值
如果await的promise失败了,就会抛出异常,需要进行try catch处理,同时通过trycatch可以获取失败的promise的值
/* await await必须和async连用 await右侧表达式为promise,得到的结果就是promise成功的value await右侧表达式不是promise,得到的结果就是值本身 await只能得到成功的结果,如果想要得到失败的结果,只能用trycatch */ async function fn3() { try { return await Promise.reject(2); } catch (error) { console.log(error)//2 } } console.log(fn3()) /* Promise {<pending>} [[PromiseStatus]]: "rejected" [[PromiseValue]]: 2 */