koa v2的异步实现
发布于 6 年前 作者 hezhongfeng 4410 次浏览 来自 问答

本人新手,刚开始接触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,像mongodb都支持返回Promise的。

是的, 首先User.get是一个数据库的异步操作, 那么它必须返回一个Promise, 假设是一个同步操作, 返回一个直接量, await 也会把它转换成一个 Promise, 具体可以看阮老师的es6教程, await 这部分内容是标准里面的, 所以跟koa还是非koa并没什么关系, koa不会帮你转换的

@jimliang 谢谢回答~

@wssgcg1213 明白了,如果是很耗时的操作,我必须把它变成异步的。但是咱们怎么能知道这个中间件的操作是不是异步的,还是基本上所有的中间件都是异步的?(如果耗时的话)

不管同步还是异步,,时间都是一样的,改成异步你也得等数据查到之后才返回数据额。。

跑题了。。。必须得返回promise,不理解的可以看看async相关的文章

回到顶部