0
TL; DR;使用http攔截器(在Ionic 2中)發送重複http請求
爲什麼預訂至可觀察在HTTP攔截器產生重複HTTP請求到服務器?
示例代碼:
doGetWithInterceptor() {
console.log("Http get with interceptor -> 2 http calls ?? Why?");
this.http_interceptor_get("http://ip.jsontest.com/").subscribe(data => {
console.log("But only one block of data received:", data);
this.result= data.ip;
});
}
http_interceptor_get(url : string) {
let req= this.http.get(url).map(res => res.json());
req.subscribe((data) => {
console.log("[HttpInterceptor]");
});
return req;
}
全部細節:
我使用HTTP攔截服務於我的離子2項目在全球範圍內發現錯誤,身份驗證,以及更多...
但是這樣做,我看到了對服務器的重複http請求。
我有一個小的測試應用程序從一個空白離子2模板開始:
,清楚地顯示在Firebug的問題:
- 第一個請求(它的確定,單)如果使用GET按鈕。
- 第二個請求(重複)使用「Get with interceptor」按鈕。
同時,訂閱部分中的代碼只執行一次,因爲它應該。
的home.ts代碼如下:
import { Component } from '@angular/core';
import { NavController } from 'ionic-angular';
import { Http, Response } from '@angular/http';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';
@Component({
selector: 'page-home',
templateUrl: 'home.html'
})
export class HomePage {
result : string = "???";
constructor(public navCtrl: NavController, public http: Http) {
}
http_get(url : string) {
return this.http.get(url).map(res => res.json());
}
http_interceptor_get(url : string) {
let req= this.http.get(url).map(res => res.json());
req.subscribe((data) => {
console.log("[HttpInterceptor]");
});
return req;
}
doGet() {
console.log("Normal http get -> 1 http call");
this.http_get("http://ip.jsontest.com/").subscribe(data => {
console.log("One block of data received:", data);
this.result= data.ip;
});
}
doGetWithInterceptor() {
console.log("Http get with interceptor -> 2 http calls ?? Why?");
this.http_interceptor_get("http://ip.jsontest.com/").subscribe(data => {
console.log("But only one block of data received:", data);
this.result= data.ip;
});
}
doClearResult() {
this.result= "???";
}
}
的_.do_的伎倆。我不知何故認爲Observable會執行操作(一次),然後將數據提供給所有用戶(在我的情況下是兩次),類似事件發射器 - 接收器。非常感謝您的快速回答! – jrierab
http://stackoverflow.com/questions/37771855/chaining-observables-in-rxjs這是你在找什麼?或http://stackoverflow.com/questions/25634375/rxjs-only-the-first-observer-can-see-data-from-observable-share? –
那麼,我想創建一個httpInterceptor,它應該處理404和類似的錯誤(在catch中?),還有從服務器返回的'未授權'錯誤(在.do部分中進行了驗證)。如果一切正常,信息應該返回給調用者,它將根據需要處理它。在我看來,我應該深入Obrservable/Subject/... sea :-) – jrierab