第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

koa2源碼閱讀的一點(diǎn)問題

koa2源碼閱讀的一點(diǎn)問題

ibeautiful 2019-03-01 18:27:39
在閱讀koa2的源碼過程中,讀到了application里面的一個(gè)callback方法,因?yàn)檫@個(gè)方法是返回createServer所需要的回調(diào)函數(shù)的,就對(duì)其中的一句代碼感到了不理解,就是handleRequest里面為什么需要return this.handleRequest(ctx, fn)呢。不return直接執(zhí)行好像也沒有問題    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貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超10個(gè)贊

結(jié)論:在絕大多數(shù)情況下,這個(gè)return是沒有任何實(shí)際作用的,除了一些特殊的場(chǎng)景,比如從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實(shí)例,方便開發(fā)者后續(xù)的操作(在請(qǐng)求處理完成之后)。


當(dāng)然,上面的例子因?yàn)楸容^簡(jiǎn)單,不一定要用.then()也能實(shí)現(xiàn)。只不過返回Promise實(shí)例,編碼起來會(huì)方便很多。


比如你想在koa處理完請(qǐng)求后做一些事情,如果沒有return的話,你需要些一些比較惡心繁瑣的代碼來判斷請(qǐng)求是否已經(jīng)處理完。


查看完整回答
反對(duì) 回復(fù) 2019-03-12
  • 2 回答
  • 0 關(guān)注
  • 533 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)