KOA-async/await语法
前言
Koa2相较Koa1最大的区别就是中间件的写法不同,Koa1使用Generator,Koa2使用async/await语法。
使用Async/Await语法
-
在讲解Async/Await之前,有必要简单讲一下javascript的异步发展历程,并给每种异步的方式给一段示例代码,异步主要经历了这么几个过程:
- Es6之前:
回调函数(callback) - Es6:
Promise对象
Generator函数 - Es7:
async/await语法
- Es6之前:
-
使用async/await
- async用于声明一个function是异步的
- await只能出现在用async修饰的function中
-
async到底起什么作用:
- async函数返回一个promise对象,如果在async函数中返回一个直接量,async会通过Promise.resolve封装成Promise对象。我们可以通过调用promise对象的then方法,获取这个直接量。
-
await到底在等什么
-
await会暂停当前async的执行,await会阻塞代码的执行,直到await后的表达式处理完成,代码才能继续往下执行。
-
await后的表达式既可以是一个Promise对象,也可以是任何要等待的值。
-
如果await等到的是一个 Promise 对象,await 就忙起来了,它会阻塞后面的代码,等着 Promise 对象 resolve,然后得到 resolve 的值,作为 await 表达式的运算结果。!
-
如果它等到的不是一个 Promise 对象,那 await 表达式的运算结果就是它等到的东西。
router.get('/All', async (ctx) => { let query_params = ctx.query; let result = null; result = await TeamController.getAllGroup() response(ctx, result); });
例如我们项目中的api,TeamController.getAllGroup就会阻塞代码的执行。
-