我正在尝试从角度为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
),但看不到其他日志(成功/错误/完成)。
谁能提供一些见识?感谢您的帮助,我敢肯定这是微不足道的。
答案 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导入的。