这里dispatch.bind(null)有什么用吗

来源:11-11 中间件原理-代码演示

crazyones110

2019-11-30

老师您好,我有两个问题

// 组合中间件
function compose (middlewareList) {
  return function (ctx) {
    // 中间件调用
    function dispatch (i) {
      const fn = middlewareList[i] // 就是某一个中间件函数,async function
      try {
        return Promise.resolve(
          fn(ctx, dispatch.bind(null, i + 1)) // fn 都是 async 函数,返回的都是 Promise
        )
      } catch (err) {
        return Promise.reject(err)
      }
    }
    return dispatch(0)
  }
}
  1. 这里的 dispatch 函数里面没用到 this,为什么还要 bind null
  2. dispatch.bind(null, i + 1)这样的话 i最后不会越过middlewareList的界吗
写回答

1回答

双越

2019-11-30

第一,这里的 this 没有什么作用,不信你可以打印看看 this 值。再者,无论 express 和 koa ,中间件都是通过 req res 或者 ctx 作为核心数据进行通讯的,没有通过 this 的。

第二,据调用过程,应该不会越界。但是为了代码健壮性,加一个放错判断也可以呀。

0
3
crazyones110
非常感谢!
2019-12-03
共3条回复

Node.js+Express+Koa2+Nest.js 开发服务端

从入门到实战,一站式掌握 Node.js+Express+Koa2

4050 学习 · 2006 问题

查看课程