拦截器管理类: forEach 接口就是遍历 interceptors

来源:8-3 -3 拦截器的设计与实现 - 链式调用实现

刘津馨

2020-01-13

您好,老师
forEach(fn: (interceptor: Interceptor) => void): void {
this.interceptors.forEach(interceptor => {
if (interceptor !== null) {
fn(interceptor)
}
})
}
请问此段代码,什么时候被执行? fn 是一个匿名function 函数? 能细致讲一下,此处调用没太看懂。

写回答

1回答

ustbhuangyi

2020-01-13

首先你创建拦截器是通过 use 方法,比如:
//img.mukewang.com/szimg/5e1c1a7609438f9712840246.jpg
use 方法定义如下:
//img.mukewang.com/szimg/5e1c1a970930ea5117100434.jpg
其实就是把定义的拦截器添加到 this.interceptors 这个数组中。

然后在发送请求的时候,就会从调用这个 forEach 方法了,传入的参数 fn 就是这个箭头函数。//img.mukewang.com/szimg/5e1c19a009017d1f15300254.jpg

再看这个 forEach 函数,实际上很简单,内部遍历  this.interceptors,然后执行 fn//img.mukewang.com/szimg/5e1c1aeb099df46115420418.jpg

在我们这个例子中 fn 就是上面的箭头函数,实际上就是把 interceptor 添加到 chain 中。

2
0

下一代前端开发语言 TypeScript从零重构axios

课程从零开始重构功能完整的JS库,是学习造轮子的不二之选!

2629 学习 · 877 问题

查看课程