【发布时间】:2023-04-01 13:08:01
【问题描述】:
我在 Angular2 中使用 BreezeJS,并注意到 MetaData 调用被多次调用。
我尝试通过在我的 BreezeDataService 的构造函数上调用 fetchMetadata() 来填充缓存,但这没有任何区别(它添加了另一个元数据调用)。
this.entityManager.fetchMetadata().then(function () { console.log('entityManager.fetchMetadata finished'); });
我认为这是由于主页加载时发出 5 次数据请求而导致的,每个请求都开始获取元数据,而无需等待现有的元数据调用完成。
您可以在www.quemesa.com 上使用网络工具查看问题:(前 5 个是 PReflight CORS 请求)
如何让代码等待任何现有的元数据调用完成而不是再次获取它?
使用代码更新:
@Injectable()
export class DataBreezeService {
public isSaving: boolean = false;
public entityManager: EntityManager;
constructor(private spinnerService: SpinnerService, private loggerService: LoggerService) {
this.entityManager = new EntityManager(environment.webApiServiceUrl);
this.entityManager.metadataStore.namingConvention = NamingConvention.camelCase;
this.entityManager.fetchMetadata().then(() => this.loggerService.info('entityManager.fetchMetadata finished'));
}
public executeQueryArray(query: EntityQuery) {
return this.entityManager.executeQuery(query)
.then((queryResult: QueryResult) => this.successArrayDataLoad(queryResult))
.catch((error) => this.errorDataLoad(error))
}
然后我有使用 DataBreezeService 的不同实体服务:
@Injectable()
export class BookingService {
constructor(private dataBreezeService: DataBreezeService, private loggerService: LoggerService) {
}
public getBookingsForUser(userId: number, forceServerCall: boolean = false) {
this.dataBreezeService.initialiseQuery('getBookingsForUser', [userId], forceServerCall);
let query = new EntityQuery()
.from("bookings")
.where("createdByUserId", "==", userId)
.where("visibilityId", "==", Status.Active) //booking is active
.toType('Booking')
.expand('createdByUser, restaurant, restaurant.suburb, restaurantScheduleDiscount, rating')
.orderBy("bookingDate Desc")
.inlineCount(); //return total
return this.dataBreezeService.executeQueryArray(query);
}
【问题讨论】:
标签: breeze