[英]How to chain 2 Observables with Angular2
我試圖做以下沒有成功的事情。 我正在嘗試根據先前的HTTP請求結果觸發一個HTTP請求/可觀察到。
ngOnInit() {
this._lights.LastChannel(this.hostname).subscribe(data => {
this.LastChannel = data.Message;
this.shields = this.LastChannel / 8;
if (this.LastChannel % 8 != 0){
this.shields++;
}
for(var i=0; i < this.shields; i++){
console.log(i+1);
this.shield(i+1)
}
});
}
shield(index){
this._lights.shieldStatus(this.hostname, index)
.subscribe(data=> {
console.log(data.Message.split(' '));
console.log(data.Message)
})
}
第一個請求運行正常,第二個被觸發。 Go服務器響應200,但瀏覽器顯示保持掛起狀態。
您需要為此的flatMap運算符
this._lights.LastChannel(this.hostname).flatMap(
(data) => {
let params: URLSearchParams = new URLSearchParams();
params.set('access_token', localStorage.getItem('access_token'));
return this._lights.shieldStatus(this.hostname, data.messages).map((res: Response) => res.json());
}
);
@ThierryTempiler在這里回答了這個問題: 角度2:首次服務成功時兩個后端服務調用
您需要創建第三個服務函數,該函數將使用Observable.forkJoin
將兩個請求連接在一起。
initial (device){
var obs = this.LastChannel(device).flatMap(
(data) => {
return Observable.forkJoin([
Observable.of(data),
this.shieldStatus(device, data)
]);
}
);
return obs;
}
那我可以這樣稱呼它
ngOnInit() {
this._lights.initial(this.hostname).subscribe(data=> console.log(data))
}
並且此數據是兩個請求響應的數組。
Array[2]
0
:
Object
Message
:
"64"
Time
:
"2016-05-14T09:13:12.416400176-03:00"
1
:
Object
Message
:
"false false false false false true true true"
Time
:
"2016-05-14T09:13:12.797315391-03:00"
:
2
__proto__
:
Array[0]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.