Angular 创建无状态服务的正确方法
我需要使用RxJs和Observable维护一个无状态服务。所以我做了这件事: 注意:这里我需要以一种反应式的方式生成一个工作订单号,并将其存储在LocalStorage上,以避免在浏览器刷新/应用程序终止用例中出现Id为的LOO 我的疑问是,我是否正确地创建了无状态服务?如果不是,最好的方法是什么 注意:所有设备工作正常。但是我需要知道我在这个架构上是否正确 工单-data.Service.tsAngular 创建无状态服务的正确方法,angular,typescript,ionic-framework,rxjs,observer-pattern,Angular,Typescript,Ionic Framework,Rxjs,Observer Pattern,我需要使用RxJs和Observable维护一个无状态服务。所以我做了这件事: 注意:这里我需要以一种反应式的方式生成一个工作订单号,并将其存储在LocalStorage上,以避免在浏览器刷新/应用程序终止用例中出现Id为的LOO 我的疑问是,我是否正确地创建了无状态服务?如果不是,最好的方法是什么 注意:所有设备工作正常。但是我需要知道我在这个架构上是否正确 工单-data.Service.ts 建筑是好的和合法的 如果要扩展被动方法,则将initializeApp转换为可观察的 这里不需要承
建筑是好的和合法的 如果要扩展被动方法,则将
initializeApp
转换为可观察的
这里不需要承诺
毕竟,可观测的力量在于它们对多个API的全局API抽象。(承诺/获取/常规数据结构,如数组等)
我要做的是:
initializeApp(): Observable<any> {
return from(Number(this.storage.get(LocalStorageConstant.WORK_ORDER_NUMBER))).pipe(take(1)); // take(1) for auto completion.
}
initializeApp():可观察{
从(Number(this.storage.get(LocalStorageConstant.WORK\u ORDER\u Number))).pipe(take(1));//take(1)自动完成返回。
}
然后在你的app.component.ts中的ngOnInit
中订阅它,你可以也应该调用this.workOrdersDataService.setDefaultWorkOrderNumber
注意这里没有void
签名,而是any
,因为它缺少subscribe函数参数
也可能不是直接关于这个问题,但是我会考虑一个<代码>发布行为>代码>连同一个<代码> ReCuth.<代码>(RealCuto,用于自动订阅计数),在一个更“现代”的写作中直接声明主题。(这也允许您使用其.connect方法来决定何时激活主题,而不是在数据服务中提前分配主题)。
您测试过吗?有效吗?@jonrsharpe一切都很好。但是我需要知道我的架构是否正确。如果this.storage.set(…)
是一个同步操作,那么这看起来是一个让ylur代码反应的好方法。您可能只想取消订阅在createWorkOrder()
中创建的订阅。关于TypeScript样式的最后一点:您可能不需要定义您初始化的变量类型workOrderNumber=1
相当于workOrderNumber:number=1
。使用1
TS初始化后,TS知道workOrderNumber
是一个数字。
async initializeApp(): Promise<void> {
this.workOrdersDataService.setDefaultWorkOrderNumber(Number(await this.storage.get(LocalStorageConstant.WORK_ORDER_NUMBER)));
}
createWorkOrder(): void {
this.workOrdersDataService.setWorkOrderNumber(); // to generate new work order no.
this.workOrdersDataService.workOrderNumberChanged$.subscribe((res: number) => {
const workOrderNumber: string = environment.companyEnvironment.workOrderPrefix + res; // work order no. creation
});
}
initializeApp(): Observable<any> {
return from(Number(this.storage.get(LocalStorageConstant.WORK_ORDER_NUMBER))).pipe(take(1)); // take(1) for auto completion.
}