async await应该算是es7的东西了吧,在express和koa1中处理异步的方法都是yeild和generator等方式来处理异步看起来代码显得臃肿还有各种缺点(反正不用也没去深入了解)。
koa2最新的node框架推出后直接完美支持async await,使得node能更加优雅的处理异步请求,在koa2的框架中会大量的用到这个方法。
异步中的同步
await必须依赖于async,如果没有async那么await就会报错,但是有async没有await是没有问题的。
函数中传入的第二个参数next在函数中如果执行了next()那么就会跳出当前的方法去执行后面的方法。
先来看看基本的用法
async (ctx, next) => { /*获取全部数据*/ const data1 = await user.find() data1.sort(function (n1,n2) { return n1.id - n2.id }) ctx.response.body = { code: 1, list: data1, message: '获取数据成功' } next() console.log('我是不会执行的') }
因为查询数据库是个异步的过程,js是单线程如果数据量大没有做处理那么在查询到数据前就跑完整个过程,前端就接收不到数据。这里的处理方法要么是在promise查询到数据后的回调中进行相关操作。
async await直接将这个异步过程当成同步来处理,await user.find()等待数据查询到然后在执行后面的操作。相对promise代码简介高效。
async await在node.js的接口方法中的到了大量的引用。