小编Ale*_*lov的帖子

如何在 Angular 服务中创建同步方法?

我有一个 Angular 15 应用程序,其中有一些组件调用服务方法从后端检索一些数据。在执行之前,服务会检查本地缓存中是否有所需的数据。如果没有数据,则服务执行端点并将检索到的数据存储在缓存中。在代码中看起来是这样的:

export class CryptoMarketService implements MarketService {
   private _activeOrdersCache: Cache<Array<Order>> = new Cache<Array<Order>>();
   ...
    getActiveOrders(): Observable<Array<Order>> {   // the method should be syncrhonized
       if (this._activeOrdersCache.hasCache()) {
           return of(this._activeOrdersCache.get());
       }

       return this.httpClient.get('/market/orders/active')
        .pipe(
            map((res: any) => {
                return Order.fromJsonArray(res);
            }),
            tap((activeOrders: Array<Order>) => {
                this._activeOrdersCache.set(activeOrders, 5, TimeUnit.MINUTES);
            })
        );
}
Run Code Online (Sandbox Code Playgroud)

但是一些组件同时调用该方法,因此实际上它们都在调用后端(因为缓存无法及时初始化),并且只有在获得响应后,缓存才会填充两次。那么有没有一种方法可以使该服务方法同步(就像在java中一样),使第二个线程等待第一个线程完成,并仅在缓存确定后才开始执行 getActiveOrders 方法?

Angular 是否有类似 Java 或 C# 中的同步机制?

observable rxjs typescript angular

2
推荐指数
1
解决办法
104
查看次数

标签 统计

angular ×1

observable ×1

rxjs ×1

typescript ×1