【问题标题】:How to return data after stream was subscribed?订阅流后如何返回数据?
【发布时间】:2019-01-10 06:59:27
【问题描述】:
订阅流后如何返回数据?
比如我在订阅中获取URL,然后我想根据这个URD返回带有数据的流
public get() {
this.service.getData().subscribe((data: any) => {
// data was setted here
this.url = data;
});
return this.http.get(this.url)
.map(r => {
...
return obj;
});
}
【问题讨论】:
标签:
angular
typescript
rxjs
subscription
【解决方案1】:
您应该为此使用concatMap(或mergeMap)并将其变成一个链:
public get() {
this.service.getData().do((data: any) => {
// data was set here
this.url = data;
})
.concatMap(data => this.http.get(data))
.map(r => {
...
return obj;
});
}
或者你甚至不需要使用this.url(我不知道你的用例是什么)。
public get() {
this.service.getData()
.concatMap(url => this.http.get(url))
.map(r => {
...
return obj;
});
}
【解决方案2】:
this.service.getData().subscribe((data: any) => {
// data was setted here
return this.http.get(data)
.map(r => {
return r;
});
});
或
public get() {
this.service.getData().subscribe((data: any) => {
// data was setted here
this.url = data;
this.get2(this.url);
});
}
public get2(url){
return this.http.get(url)
.map(r => {
...
return obj;
});
}
【解决方案3】:
尝试:
public get() {
this.service.getData().subscribe((data: any) => {
// data was setted here
this.url = data;
//get data with the URL
return this.http.get(data)
.map(r => {
//Get something with data obtained with the URL
return obj;
});
});
}