请稍等 ...
×

采纳答案成功!

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

關於 Http攔截器問題

老師請問

  1. 若有多個 HttpInterceptor 中的 next 會指向下一個攔截器對嗎? 順序是依賴注入的順序嗎?
  2. next.handle(req).pipe() 這個裡面的處理函式,是在外面 component 訂閱之前執行嗎? 不大理解這段寫法!?

正在回答

2回答

接灰的电子产品 2019-06-23 23:36:35

1, next 是一个叫 HttpHandler 的对象,这个对象是用来处理 Http Request 的,处理的结果是产生一个 HTTP 事件流,其中 HttpResponse 也就是服务端返回的响应会出现在这个流中。在 interceptor 中的HttpHandler( 也就是 next)参数就是下一个 interceptor。 Interceptor 的顺序不是依赖注入的顺序,而是在 providers 数组中声明的顺序,注意这个 providers 数组虽然是为依赖注入服务的,但不能叫依赖注入的顺序,因为注入行为是发生在你的组件或其它类构造中的。

2. 拦截器之所以叫拦截,说明这个行为发生在 request 发起之后,也就在订阅之后,这个拦截行为才会发生。如果在 handle 之前进行处理,就是在 request 真正发送给服务器之前对于 request 进行处理,处理后再发送请求。而在 handle 之后则是接到服务器的 response 之后,进行处理,然后再交给 httpclient,对于 httpclient 来说,收到的 response 就是你处理后的。


0 回复 有任何疑惑可以回复我~
  • 提问者 阿倫 #1
    攔截器的順序不能說是依賴注入的順序,是 provider 聲明的順序!
    
    謝謝老師的糾正~~~
    回复 有任何疑惑可以回复我~ 2019-06-23 23:50:37
提问者 阿倫 2019-06-23 23:46:03

謝謝老師,講解的非常清楚。
再請問老師一下,request 跟 response 攔截器都可以是多過對吧且每個攔截器應該單一職責。

0 回复 有任何疑惑可以回复我~
  • 可以是多个。至于单一职责属于编码的规范问题,angular 本身没有要求,但最好是单一职责了
    回复 有任何疑惑可以回复我~ 2019-06-23 23:52:37

相似问题

登录后可查看更多问答,登录/注册

问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信