我有一个 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# 中的同步机制?