Typescript 如何用Angular2链接2个观察值

Typescript 如何用Angular2链接2个观察值,typescript,angular,rxjs,observable,Typescript,Angular,Rxjs,Observable,我试图做以下事情但没有成功。我正在尝试根据以前的http请求结果触发http请求/可观察 ngOnInit() { this._lights.LastChannel(this.hostname).subscribe(data => { this.LastChannel = data.Message; this.shields = this.LastChannel / 8; if (this.LastChannel % 8 != 0){

我试图做以下事情但没有成功。我正在尝试根据以前的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)
        })
}
ngOnInit(){
this.\u lights.LastChannel(this.hostname).subscribe(数据=>{
this.LastChannel=data.Message;
this.shields=this.LastChannel/8;
如果(this.LastChannel%8!=0){
这个.shields++;
}
对于(var i=0;i{
console.log(data.Message.split(“”));
console.log(data.Message)
})
}

第一个请求运行正常,第二个请求被触发。Go服务器响应200,但浏览器显示keep pending。

您需要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在这里回答了这个问题:

您需要创建第三个服务函数,该函数将使用
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]

我需要data.messages中的值来设置屏蔽函数的索引,以便触发第二个请求。有人指点我使用rxjs concatmap。我还不知道是怎么回事