当我必须选择性地使用 http Observable 或变量时,是否要从我的服务创建一个 Observable?
Do I create an Observable from my service when I have to optionally use http Observable or a variable?
我有一项服务可以检查 API 端点的状态数据。在某些情况下,我不需要根据其他本地数据进行 API 调用。此检查发生在应用程序的几个不同组件中。
因为我想将逻辑封装到服务中 - 我是否必须创建一个自定义 Observer 来 return 组件的变量?
我的方法 isClosed 检查一些局部变量并基于 returns true 或执行 API 调用。
isClosed(): Observable<boolean> {
let o: Observable<boolean>;
if (myCustomLogic) {
//do some stuff...
//this is the api call (http.get) which returns Observable<boolean>
o = this.checkClosed();
} else {
//based on myCustomLogic
//I dont need to call the api, but I am
//assuming i still need an observable???
o = new Observable((observer) => {
console.log('Custom observer');
observer.next(true);
return {
unsubscribe(): void {
//i dont what to do here
}
};
});
}
return o;
}
是的,您仍然需要一个始终发出 true 并完成的 observable。
这是一个非常常见的用例,已经有一个名为 of 的“快捷方式”,所以基本上您的代码可以缩短为:
import { of } from "rxjs";
// ...
isClosed(): Observable<boolean> {
if (myCustomLogic) {
//do some stuff...
//this is the api call (http.get) which returns Observable<boolean>
return this.checkClosed();
} else {
return of(true);
}
}
我有一项服务可以检查 API 端点的状态数据。在某些情况下,我不需要根据其他本地数据进行 API 调用。此检查发生在应用程序的几个不同组件中。
因为我想将逻辑封装到服务中 - 我是否必须创建一个自定义 Observer 来 return 组件的变量?
我的方法 isClosed 检查一些局部变量并基于 returns true 或执行 API 调用。
isClosed(): Observable<boolean> {
let o: Observable<boolean>;
if (myCustomLogic) {
//do some stuff...
//this is the api call (http.get) which returns Observable<boolean>
o = this.checkClosed();
} else {
//based on myCustomLogic
//I dont need to call the api, but I am
//assuming i still need an observable???
o = new Observable((observer) => {
console.log('Custom observer');
observer.next(true);
return {
unsubscribe(): void {
//i dont what to do here
}
};
});
}
return o;
}
是的,您仍然需要一个始终发出 true 并完成的 observable。
这是一个非常常见的用例,已经有一个名为 of 的“快捷方式”,所以基本上您的代码可以缩短为:
import { of } from "rxjs";
// ...
isClosed(): Observable<boolean> {
if (myCustomLogic) {
//do some stuff...
//this is the api call (http.get) which returns Observable<boolean>
return this.checkClosed();
} else {
return of(true);
}
}