猿问

koa2源码阅读的一点问题

在阅读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;

    }

有懂的大神帮忙解答下吗,多谢了!


ibeautiful
浏览 522回答 2
2回答

白衣染霜花

结论:在绝大多数情况下,这个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的话,你需要些一些比较恶心繁琐的代码来判断请求是否已经处理完。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答