在 Angular 15 应用程序中,有多个组件同时调用服务方法(调用后端的其余部分)。服务本身立即检查所需的数据是否已在内部缓存中,如果没有,则调用端点并缓存结果。它看起来像这样:
export class CryptoMarketService implements MarketService {
private _activeOrdersCache: Cache<Array<Order>> = new Cache<Array<Order>>();
...
getActiveOrders(): Observable<Array<Order>> { // тут нужен synchronized метода
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);
})
);
}
问题在于,组件同时调用此方法,因此,两个组件都会立即实际调用端点后端,绕过缓存,然后写入缓存。告诉我,是否可以以某种方式同步此方法,以便当一个线程处理该方法时,第二个线程等待,然后才进入并从本地缓存接收数据?
英语领域的同事建议你只需要缓存整个 Observable 并使用 shareReplay 运算符即可:
更多详细信息请参见:https://stackoverflow.com/questions/77638897/how-to-make-synchronized-method-in-angular-service