Angular 可观察/订阅不起作用

问题描述 投票:0回答:1

我正在尝试从角度 7 的可观察值中获取值。我在服务中有一些类似这样的函数

getSomething(): Observable<MyObject[]> {
  let result = new Subject<MyObject[]>();
  this.callApi('hello-world').subscribe(data => {
      console.log('hello-world data: ', data);
      result.next(this._mapToMyObjectArray(data));
  });
  return result.asObservable();
}

_mapToMyObjectArray(data: any): MyObject[] {
    ...
}

我能够毫无问题地记录 hello-world 数据(API 被调用并按我的预期响应)。

但是,当我尝试从另一个组件订阅此组件时,例如

doStuff(): void {
    console.log('do stuff with something');
    this.myService.getSomething().subscribe(
        (result) => console.log('result', result),
        (error) => console.log('error', error),
        () => console.log('done')
     );
}

当我调用

doStuff()
时,我看到第一个日志 (
do stuff with something
),但看不到其他日志(成功/错误/完成)。

任何人都可以提供一些见解吗?感谢您的帮助,我确信这是一件微不足道的事情。

observable angular7
1个回答
1
投票

希望这可以帮助别人。我对主体和观察者之间的差异有一个根本性的误解。请参阅此处

我通过在

getSomething
函数中创建一个观察者而不是主题来解决这个问题。

getSomething(): Observable<MyObject[]> {
  var result: Observable<MyObject[]>;
  this.callApi('hello-world').subscribe(data => {
      console.log('hello-world data: ', data);
      result = of(this._mapToMyObjectArray(data));
  });
  return result;
}

其中

of
是从 rxjs 导入的。

© www.soinside.com 2019 - 2024. All rights reserved.