请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

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

老师您好,我有两个问题

// 组合中间件
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 17:13:51

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

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

0 回复 有任何疑惑可以回复我~
  • 提问者 crazyones110 #1
    this没用的话,为什么还要bind null呢,bind不是拿来改变函数指向的this吗。
    第二点的确不会越界,因为只要最后一个中间件函数里没有调用next,即使越界了是 undefined 也无所谓
    回复 有任何疑惑可以回复我~ 2019-11-30 17:28:05
  • 双越 回复 提问者 crazyones110 #2
    既然 this 没用,就不要绑定,绑定 null 的话,大家知道 null 就不会去用了,用了也会报错,但是绑定了 this ,万一大家不知道用了,也没报错,但又行不通,这不是多此一举吗。
    回复 有任何疑惑可以回复我~ 2019-11-30 19:46:26
  • 提问者 crazyones110 #3
    非常感谢!
    回复 有任何疑惑可以回复我~ 2019-12-03 13:38:21
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信