在阅读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; }有懂的大神帮忙解答下吗,多谢了!
2 回答
白衣染霜花
TA贡献1796条经验 获得超10个赞
结论:在绝大多数情况下,这个return是没有任何实际作用的,除了一些特殊的场景,比如从express迁移到koa。
看具体例子:
const http = require('http');
const koa = require('koa');
const koaApp = new koa();
koaApp.use(async ctx => {
ctx.body = 'call api';
});
const koaCallback = koaApp.callback();
const express = require('express');
const expressApp = express();
expressApp.use('/api', (req, res, next) => {
koaCallback(req, res)
.then(() => {
console.log('api is called');
})
});
expressApp.listen(3000);
return this.handleRequest(ctx, fn)返回了promise实例,方便开发者后续的操作(在请求处理完成之后)。
当然,上面的例子因为比较简单,不一定要用.then()也能实现。只不过返回Promise实例,编码起来会方便很多。
比如你想在koa处理完请求后做一些事情,如果没有return的话,你需要些一些比较恶心繁琐的代码来判断请求是否已经处理完。
添加回答
举报
0/150
提交
取消