koa2都支持async await了,咱们有什么理由不用呢,既然要用,确定要先简单了解下。promise
首先要说明的这是一个函数,就想function *(){}同样,只是一个函数而已。只不过是函数,generator函数,async函数区分而已。koa
既然叫async函数,而不是普通函数,那么它确定有本身的一些特性:async
async function test() { //throw new Error('hello error'); // await Promise.reject('hello error'); return 'hello world'; } test() .then(res => {console.log(res)}) .catch(err => {console.log(err.toString())})
async始终返回一个promise,函数
若是是return 一个val,那么会经过promise.resolve(val)返回;koa2
若是抛出一个异常,async函数马上终止执行,并经过promise.reject(err)返回;code
若是await遇到后面是一个reject状态的promse,async函数当即终止,并返回该错误;对象
若是没有显示的return,那么会经过promise.resolve()返回generator
###await 只能在async函数中it
就像yield必须在generator函数中同样,一般await后面接的是一个promise对象io
/*声明一个函数*/ async function test1(args) { console.log(args); return await 'hello world'; } /*在声明一个函数,并在函数中调用*/ async function test2(args) { var test = await test1(args) return await test1(test); } /*声明一个对象,把函数做为它的属性*/ var obj = { test3: async function(args) { return test2(args); } } obj.test3('i said ') .then(function(res) { console.log(res); }) .catch(function(err) { console.log(err); })
是否是和普通跟函数调用同样呢