访问gundb获取链中以前的值

  • 本文关键字:gundb 获取 访问 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中,但这看起来很难看。

有没有一种首选的方式来保留或访问以前链接的get的状态?

@Leo问得好。

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

  1. 就像你说的那样,做回调嵌套(讨厌!(
  2. 不要嵌套,在孙回调中使用this.back()

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

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

你可以用(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,比如说,从根获取完整路径:

var path = [];
this.back(function(at){ path.push(at.get) });
console.log(path.reverse().join('.'));
// 'a.b.c.d.e'

前进:

  1. .back()和内部链元数据的文档需要改进
  2. 为您提供完整的路径,而不是让您生成它,以及其他类似的常见内容,将来可能会添加到链元数据中
  3. 更实际地说,你会看到更多的链扩展,它们只是为你自动化:

所有这些想法今天都有可能在GUN上构建/扩展,即使.open()也不到50 LOC链扩展!社区很乐意帮助您构建这些扩展

类似于.open(),但不是在链的下加载文档,而是在链的上加载文档,仅用于该孤立路径。

或者类似的工具,比如将模式传递给父级,以及.open()的替代版本,只加载模式中的项,而不是下面的所有项。

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

相关内容

  • 没有找到相关文章

最新更新