Angular 2 - 直接从Observable返回数据

Angular 2 - 直接从Observable返回数据

我一直在试图解决这个问题,而且我已经能够阅读的任何文档都没有给我一个问题的答案。

我有一个直接与API通信并返回可观察事件的服务,在正常情况下我会订阅并按照数据执行我想要的操作,但是在使用来自restful服务的请求的辅助服务中,我需要能够从请求中返回值。

getSomething() {
    return this._restService.addRequest('object', 'method').run()
        .subscribe(
            res => {
                res;
            },
            err => {
                console.error(err);
            }
        );}returnSomething() {
    return this.getSomething();}

在上面的快速示例中,我想知道是否有任何方法可以resgetSomething()内部返回returnSomething()。如果以这种方式无法实现,那么替代方案是什么?我将补充说_restService非常依赖,我真的不想开始搞乱它。


蝴蝶不菲
浏览 1615回答 3
3回答

天涯尽头无女友

由于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

我自己没有使用它,但我相信它应该在理论上起作用(:// 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}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

AngularJS