访问gundb链中的先前值可获取

时间:2018-12-20 21:24:37

标签: gun gundb

在gundb中,链接get来查找节点很方便。

例如:

grandparent.get("children").map().get("children").map().once(function(grandchild,id) {...})

但是,该函数在孙子上下文中被调用。如果我想获得对父级(或任何其他中间节点)的引用怎么办?

最简单的方法是分解查询:

grandparent.get("children").map().once(function(parent,id){
    parent.get("children").map().once(function(child,id){
         ...
    }
})

但这似乎不必要。我也曾尝试向map()中添加一个函数,该函数将当前值存储在this中,但这看起来很丑。

是否存在从先前链接的获取中保留或访问状态的首选方法?

1 个答案:

答案 0 :(得分:0)

@Leo很好的问题。

目前有两种方法,如果您能想到更好的方法,请告诉我们!

  1. 就像你说的一样,做回调嵌套(糟糕!)。
  2. 不要嵌套,在子孙回调中使用this.back()
  

值得一提的是:使用gun.open()之类的扩展API从父级向下加载完整文档。

this.on回调中的

.once是回调中数据的链上下文/引用。

您可以使用(2)做很多事情,例如:

如果您想从父母那里获取更多数据,可以进行this.back(2).get('some').get('other').get('data').once(cb)

但是,在大多数情况下,您只需要祖父母的路径,因为map是动态的,您不知道路径是什么。

在这种情况下,您可以同步地从链元数据中获取该信息:

(假设路径为a.b.c.d.e,我们在e上)

this.back('get') // 'e'

this.back(2).back('get') // 'c'

例如,如果要遍历每个“后退”链,例如说要从根目录获取完整路径:

forEach

前进:

  1. var path = []; this.back(function(at){ path.push(at.get) }); console.log(path.reverse().join('.')); // 'a.b.c.d.e' 的文档和内部链元数据需要改进。
  2. 为您提供完整路径,而不是让您生成完整路径,以及其他类似的常见事物,将来可能会添加到链元数据中。
  3. 实际上,您会看到更多的链扩展,它们会自动为您自动化:

所有这些想法现在都可以在GUN上构建/扩展,即使.back()的LOC链扩展少于50个! community很乐意帮助您构建这些扩展!

类似于.open(),但不是在链的下方加载文件,而是在链中将文件备份加载,只针对该隔离路径。< / p>

或类似的工具,例如将架构传递给父级,以及.open()的替代版本仅加载架构中的项目,而不加载其下面的所有内容。

这迅速扩展到GUN之上的其他查询引擎,例如SQL,Mango或实时订阅中已经存在的GraphQL