订阅流后如何return数据?
How to return data after stream was subscribed?
订阅流后如何return数据?
例如,我在订阅中得到 URL,然后我想 return 带有基于此 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;
});
}
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;
});
}
尝试:
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;
});
});
}
您应该为此使用 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;
});
}
订阅流后如何return数据? 例如,我在订阅中得到 URL,然后我想 return 带有基于此 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;
});
}
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;
});
}
尝试:
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;
});
});
}
您应该为此使用 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;
});
}