Angular 2 - 直接从Observable返回数据我一直在试图解决这个问题,而且我已经能够阅读的任何文档都没有给我一个问题的答案。我有一个直接与API通信并返回可观察事件的服务,在正常情况下我会订阅并按照数据执行我想要的操作,但是在使用来自restful服务的请求的辅助服务中,我需要能够从请求中返回值。getSomething() {
return this._restService.addRequest('object', 'method').run()
.subscribe(
res => {
res;
},
err => {
console.error(err);
}
);}returnSomething() {
return this.getSomething();}在上面的快速示例中,我想知道是否有任何方法可以res从getSomething()内部返回returnSomething()。如果以这种方式无法实现,那么替代方案是什么?我将补充说_restService非常依赖,我真的不想开始搞乱它。
3 回答
天涯尽头无女友
TA贡献1831条经验 获得超9个赞
由于http调用等是异步的,因此Observable
返回一个而不是同步值。你必须订阅它,并在那里的回调中获得数据。没有办法解决这个问题。
一种选择是将您的逻辑放在subscribe
通话中
getSomething() { return this._restService.addRequest('object', 'method').run() .subscribe( res => { // do something here res; }, err => { console.error(err); } );}
但我喜欢这样做的方法是添加一个回调,从外部注入逻辑(可能是一个组件,也许是另一个服务):
getSomething(callback: (data) => void) { return this._restService.addRequest('object', 'method').run() .subscribe( res => { callback(res); }, err => { console.error(err); } );}
在您的组件或任何地方:
this._yourService.getSomething((data) => { // do something here console.log(data);});
GCT1015
TA贡献1827条经验 获得超4个赞
我自己没有使用它,但我相信它应该在理论上起作用(:
// service.tsgetSomething() { let subject: Subject = new Subject(); this._restService.addRequest('object', 'method').run() .subscribe(subject); return subject;}// this can be removed (;returnSomething() { return this.getSomething();}// component.tsngOnInit() { this.service.returnSomething() .subscribe(res => console.log(res), err => console.log(err));}
您可以使用不同类型的主题,例如,BehaviorSubject具有value
您可以访问的属性...
ngOnInit() { // if you use BehaviorSubject this.service.returnSomething().value}
- 3 回答
- 0 关注
- 1696 浏览
添加回答
举报
0/150
提交
取消