koa v2的异步实现
本人新手,刚开始接触web,正在学习koa2合这个框架,所以问题可能会比较幼稚 简单的MVC 问题描述: 当我从路由那接到一个请求,然后到处理函数
router.post('/aaa', aaa.test);//这个test是处理函数,下面是这个test函数
exports.test = async (ctx, next) => {
let dbpassword = await User.get(ctx.request.body.name);//这个User.get就是利用数据库中间件查询下这个name的密码
if(//密码正确){
...........
}
else(//密码错误){
...............
}
}
我的问题是,我必须要将User.get()这个函数,返回一个promise吗,就是必须得自己在代码里return new promise吗? 还是koa2框架会帮我做这个事?
6 回复
是的, 首先User.get是一个数据库的异步操作, 那么它必须返回一个Promise, 假设是一个同步操作, 返回一个直接量, await 也会把它转换成一个 Promise, 具体可以看阮老师的es6教程, await 这部分内容是标准里面的, 所以跟koa还是非koa并没什么关系, koa不会帮你转换的
@wssgcg1213 明白了,如果是很耗时的操作,我必须把它变成异步的。但是咱们怎么能知道这个中间件的操作是不是异步的,还是基本上所有的中间件都是异步的?(如果耗时的话)