【发布时间】:2021-09-12 09:52:24
【问题描述】:
我创建了一个包含以下方法的服务:
public getSomething(): Observable<MyObject> {
if (this.myObject) {
return of(this.myObject); #
} else {
return this.myService.DoIt().pipe(
switchMap((result) => {
if (result) {
return this.getObject(); !!!!
} else {
const myObject = new MyObject('Something');
return of(myObject); #
}
}),
catchError((error) => {
return this.handleError(error);
})
);
}
}
private getObject(): Observable<MyObject> {
const tempresult = this._http.get<MyObject>({
endpoint: '/something'
});
return tempresult.pipe(
map((result) => {
this.myObject = MyObject.fromJson(result);
return this.myObject;
})
);
}
在组件中,将调用“getSomething”方法,使用:
this.someService.getSomething().subscribe((result) => {
result -> The subscribe never contains the data of the 'return this.getObject();'
});
标有 # 的行正在返回正确的数据,但是 !!!!标记的行从不返回订阅中的值。所以显然我做错了什么,但我找不到解决方案。我希望'return this.getObject(); 的值' 在某些情况下会导致订阅。
你能指出我正确的方向吗?我认为这个问题是由当前的管道结构引起的 -> 管道需要返回 Observable。
【问题讨论】:
-
我没有发现任何明显的问题。你确定
this.myService.DoIt()发出true? -
在使用断点时,代码确实命中了'return this.getObject();',但订阅没有收到该值。
-
我猜
this._http.get()可能会抛出一个被catchError捕获的错误(也许它会抑制错误)?如果没有可重现的演示,很难给出任何建议。
标签: angular rxjs rxjs-observables