Angular 创建无状态服务的正确方法

Angular 创建无状态服务的正确方法,angular,typescript,ionic-framework,rxjs,observer-pattern,Angular,Typescript,Ionic Framework,Rxjs,Observer Pattern,我需要使用RxJs和Observable维护一个无状态服务。所以我做了这件事: 注意:这里我需要以一种反应式的方式生成一个工作订单号,并将其存储在LocalStorage上,以避免在浏览器刷新/应用程序终止用例中出现Id为的LOO 我的疑问是,我是否正确地创建了无状态服务?如果不是,最好的方法是什么 注意:所有设备工作正常。但是我需要知道我在这个架构上是否正确 工单-data.Service.ts 建筑是好的和合法的 如果要扩展被动方法,则将initializeApp转换为可观察的 这里不需要承

我需要使用RxJs和Observable维护一个无状态服务。所以我做了这件事:

注意:这里我需要以一种反应式的方式生成一个工作订单号,并将其存储在LocalStorage上,以避免在浏览器刷新/应用程序终止用例中出现Id为的LOO

我的疑问是,我是否正确地创建了无状态服务?如果不是,最好的方法是什么

注意:所有设备工作正常。但是我需要知道我在这个架构上是否正确

工单-data.Service.ts


建筑是好的和合法的

如果要扩展被动方法,则将
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.
 }