我有以下代码:
var getUserByGuid = function (guid, entityObservable) {
return datacontext.manager.user.fetchEntityByKey('User', guid, true)
.then(fetchSucceeded)
.fail(queryFailed);
function fetchSucceeded(data) {
var entity = data.entity;
if (ko.isWriteableObservable(entityObservable))
entityObservable(entity);
return entity;
}
function queryFailed(error) {
logger.error(error);
}
};
到此:
var getUserByGuid = function (guid, entityObservable) {
if (datacontext.manager.user.metadataStore.isEmpty()) {
return datacontext.manager.user.metadataStore.fetchMetadata('breeze/user')
.then(function () {
return datacontext.manager.user.fetchEntityByKey('User', guid, true)
.then(fetchSucceeded)
.fail(queryFailed);
});
} else {
return datacontext.manager.user.fetchEntityByKey('User', guid, true)
.then(fetchSucceeded)
.fail(queryFailed);
}
function fetchSucceeded(data) {
var entity = data.entity;
if (ko.isWriteableObservable(entityObservable))
entityObservable(entity);
return entity;
}
function queryFailed(error) {
logger.error(error);
}
};
请注意额外检查以验证metadataStore已准备好?由于我正在调用fetch,我会假设这个检查会在内部发生,但由于某种原因它不是。
我的代码在下面的“解决方法”中运行良好,但希望将其解决。
答案 0 :(得分:1)
从Breeze 1.4.9(或更高版本)开始,现在已经修复了这个问题。
我认为你是对的。我认为,问题是当你告诉它首先搜索本地缓存时,fetchEntityByKey实际上不必执行提取。但在这种情况下,如果您没有元数据,那么localQuery将失败。我将尝试在下一个版本中修复此问题,可能在本周晚些时候发布。