为了账号安全,请及时绑定邮箱和手机立即绑定

Angular 2 - 直接从Observable返回数据

Angular 2 - 直接从Observable返回数据

蝴蝶不菲 2019-08-19 17:06:30
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);});


查看完整回答
反对 回复 2019-08-19
?
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}
查看完整回答
反对 回复 2019-08-19
  • 3 回答
  • 0 关注
  • 1624 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信