【问题标题】:Angular observable / subscribe not working角度可观察/订阅不起作用
【发布时间】:2019-10-17 12:33:55
【问题描述】:

我正在尝试从角度为 7 的 observable 中获取值。我在服务中有一些看起来像这样的函数

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】:

    希望这可以帮助某人。我对受试者和观察者之间的区别有一个根本的误解。见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 导入的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-26
      • 1970-01-01
      • 1970-01-01
      • 2018-07-15
      • 1970-01-01
      • 2018-07-31
      • 2018-11-22
      • 1970-01-01
      相关资源
      最近更新 更多