考虑以下代码:
function getPersonById(personId, type) {
var p1 = new breeze.Predicate("Id", "==", personId);
var p2 = new breeze.Predicate("Type", "==", type);
var query = breeze.EntityQuery.from("Contacts").where(p1.and(p2))
if (!manager.metadataStore.hasMetadataFor(service.serviceName)) {
return manager.fetchMetadata().then(function () {
return manager.executeQuery(query.using(service));
});
} else {
var fromCache = manager.getEntityByKey('Contact', personId);
if (fromCache)
return Q.resolve(fromCache);
return manager.executeQuery(query.using(service));
}
}
我做事的方式正确吗?在我看来,我必须编写大量样板代码来获取实体。我必须确保元数据是已知的,然后确定实体是否已经在缓存中。
我面临一个问题,因为如果调用 executeQuery,则返回值是一个数组。但是,如果调用 getEntityByKey,则返回值是一个实体。我该如何以优雅的方式处理它?有没有办法强制 executeQuery 返回单个实体而不是数组?(无论如何,我希望只有一个返回值)