0

我想澄清我对 unset() 或更确切地说是我观察到的行为的理解。我知道如果我调用 unset() 它会用 null 替换值(根据 Gun 中的删除数据)。所以这就是我想确认的,假设你调用了 unset():

1) 当您调用 once() 或 on() 时,它会为未设置的节点返回 null()

2) 当你调用 Gun.obj.empty(table, '_') 它返回 false

我还尝试将我的 set 的值设置为 null 例如

get('mylist').put(null)

哪个有效!我想清空我的集合。但是,下次我添加一个新节点时,我的原始集合以及所有原始节点都被恢复了。我最终写了以下内容来清空我的集合

this.context.once().map().once(data => {
    let key = data["_"]["#"];

    let node = this.context.get(key);
    if (node) {
        this.context.unset(node);
    }
});
4

1 回答 1

0

我相信.unsettombstones ( null) 是表中的一个项目,而不是表本身。就像其他人知道的那样:.unset社区是否在 GUN 回购内部维护,而不是由我维护 - 所以我可能对其行为有误,或者扩展可能已过时。

Gun.obj.empty({})只是一个检查对象是否为空的实用程序。第二个参数允许你传递一个属性来忽略(就像'_'每个 GUN 节点在 JS 实现中都有它一样)。

不过你是对的,这gun.get('list').put(null)应该“清除”列表,这样当你再次将数据保存到它(或调用.set(item)添加项目)时,这应该强制/导致 GUN 生成的列表/表/集/集合.

它“复活”旧列表是错误的行为(除非另一个对等方试图同时在同一父上下文中重新写入旧列表),所以这应该被认为是一个需要修复的错误. (可能是由于旧的列表 ID 被缓存并且没有从内存中正确清除)

于 2018-08-22T07:10:45.127 回答