在'后按F5;EntityQuery.fromEntityKey';似乎可以用breeze清除本地缓存

在'后按F5;EntityQuery.fromEntityKey';似乎可以用breeze清除本地缓存,breeze,Breeze,我用breeze开发了一个应用程序。我需要在本地缓存中检索id=123的实体,因此我以第一个场景结束: return manager.fetchEntityByKey("Transport", 123, true) // 3rd param is true --> local cache .then(fetchSucceeded) .fail(queryFailed); function fetchSucceeded(data) {

我用breeze开发了一个应用程序。我需要在本地缓存中检索id=123的实体,因此我以第一个场景结束:

return manager.fetchEntityByKey("Transport", 123, true) // 3rd param is true --> local cache
              .then(fetchSucceeded)
              .fail(queryFailed);

function fetchSucceeded(data) {
        var s = data.entity;
        return s.isPartial() ? refreshTransport(s) : transportObservable(s);
}
var entityType = manager.metadataStore.getEntityType("Transport");
var entityKey = new EntityKey(entityType, 123);
var query = EntityQuery.fromEntityKey(entityKey)
                       .expand("Sender.City, Sender.City.Country")
                       .using(breeze.FetchStrategy.FromLocalCache);

return manager.executeQuery(query)
              .then(fetchSucceeded)
              .fail(queryFailed);

function fetchSucceeded(data) {
     var s = data.results[0];
     return s.isPartial() ? refreshTransport(s) : transportObservable(s);
}
接下来,我需要扩展一些属性,因此我以第二个场景结束:

return manager.fetchEntityByKey("Transport", 123, true) // 3rd param is true --> local cache
              .then(fetchSucceeded)
              .fail(queryFailed);

function fetchSucceeded(data) {
        var s = data.entity;
        return s.isPartial() ? refreshTransport(s) : transportObservable(s);
}
var entityType = manager.metadataStore.getEntityType("Transport");
var entityKey = new EntityKey(entityType, 123);
var query = EntityQuery.fromEntityKey(entityKey)
                       .expand("Sender.City, Sender.City.Country")
                       .using(breeze.FetchStrategy.FromLocalCache);

return manager.executeQuery(query)
              .then(fetchSucceeded)
              .fail(queryFailed);

function fetchSucceeded(data) {
     var s = data.results[0];
     return s.isPartial() ? refreshTransport(s) : transportObservable(s);
}
我对这两个场景进行了一些测试,在刷新浏览器(F5)时发现了一个差异

第一种情况:按F5时:查询能够检索本地缓存中的数据。因此,用户可以多次按F5,breeze仍将使用本地缓存

第二种情况:按F5键时:查询在本地缓存中未找到任何内容,然后在
fetchSucceed
中,由于
中的s未定义,因此
s.isPartial()
出现错误

我的问题:为什么在第二种情况下刷新浏览器似乎可以清除本地缓存中的微风?如何避免这种行为


谢谢。

当按下F5时,Breeze总是清除本地缓存。F5使浏览器重新加载整个页面,并执行每个js页面(从main.js开始)

您看到了不同的行为,因为fetchEntityByKey函数中的第三个参数指示Breeze在本地缓存上搜索,如果没有找到,则向服务器发出请求

在第二个场景中,您告诉Breeze从localcache获取实体(.using(Breeze.FetchStrategy.FromLocalCache);),因此,如果实体不在本地缓存中,Breeze将永远不会命中服务器