角度可观察/订阅不起作用

时间:2019-10-17 12:33:55

标签: observable angular7

我正在尝试从角度为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),但看不到其他日志(成功/错误/完成)。

谁能提供一些见识?感谢您的帮助,我敢肯定这是微不足道的。

1 个答案:

答案 0 :(得分:0)

希望这可以对某人有所帮助。我对主题和观察者之间的区别有根本的误解。参见here

我通过在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导入的。