在阅读koa2的源码过程中,读到了application里面的一个callback方法,因为这个方法是返回createServer所需要的回调函数的,就对其中的一句代码感到了不理解,就是handleRequest里面为什么需要return this.handleRequest(ctx, fn)
呢。不return直接执行好像也没有问题
callback() {
const fn = compose(this.middleware);
if (!this.listeners('error').length) this.on('error', this.onerror);
const handleRequest = (req, res) => {
const ctx = this.createContext(req, res);
return this.handleRequest(ctx, fn);
};
return handleRequest;
}
有懂的大神帮忙解答下吗,多谢了!
结论:在绝大多数情况下,这个
return
是没有任何实际作用的,除了一些特殊的场景,比如从express迁移到koa。看具体例子:
return this.handleRequest(ctx, fn)
返回了promise
实例,方便开发者后续的操作(在请求处理完成之后)。当然,上面的例子因为比较简单,不一定要用
.then()
也能实现。只不过返回Promise
实例,编码起来会方便很多。比如你想在koa处理完请求后做一些事情,如果没有
return
的话,你需要些一些比较恶心繁琐的代码来判断请求是否已经处理完。