如何将删除推送到本地 breeze 缓存?

How to push deletions to local breeze caches?

如果我使用的是 breezejs 并且一个客户端从缓存中删除了一条记录并将其保存到服务器,然后另一个客户端随同该记录仍在其缓存中,我如何让第二个客户端的缓存更新并删除已被硬删除的记录?

这是一个很好的问题,但我们没有很好的答案。我们将这些称为 'ghost' 实体,我们过去对它们采取的方法是,如果您通过 id 重新查询一个(或多个)实体,并且它们不返回,那么您可以安全地将它们从 entityManager 中删除。 (下面的代码没有经过测试,但应该能给你思路);

function checkIfDeleted(entityManager, entities) {
  origEntities = entities.slice(0);
  var q = EntityQuery.fromEntities(entities);
  entityManager.executeQuery(q).then(function(data) {
    var foundEntities = data.entities;
    foundEntities.forEach(function(e, ix) {
      if (entities.indexOf(e)) {
        origEntities.splice(ix,1)
      }
    });
    if (origEntities.length > 0) {
      origEntities.forEach(function(e) {
        entityManager.removeEntity(e);
      });
    }
  });
}