首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >访问gundb get链中以前的值

访问gundb get链中以前的值
EN

Stack Overflow用户
提问于 2018-12-21 05:24:37
回答 1查看 197关注 0票数 0

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

例如:

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

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

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

代码语言:javascript
复制
grandparent.get("children").map().once(function(parent,id){
    parent.get("children").map().once(function(child,id){
         ...
    }
})

但这似乎没有必要。我还尝试在map()中添加一个函数,该函数将当前值存储在this中,但这看起来相当难看。

有没有一种更好的方式来保留或访问以前链接的gets的状态?

EN

回答 1

Stack Overflow用户

发布于 2018-12-22 09:25:32

@Leo是一个很好的问题。

目前有两种方法,如果你能想到更好的方法,请让我们知道!

  1. 如你所说,做回调嵌套(讨厌!)。
  2. 不嵌套,在孙子回调中使用this.back()

荣誉奖:使用像gun.open()这样的扩展API从父级向下加载完整的文档。

.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遍历每个“返回”链,比如说,从根获取完整路径:

代码语言:javascript
复制
var path = [];
this.back(function(at){ path.push(at.get) });
console.log(path.reverse().join('.'));
// 'a.b.c.d.e'

下一步:

  1. Documentation improve.
  2. Providing .back()和内部链元数据需要为您创建完整路径,而不是让您生成完整路径,并且将来可能会将其他类似的常见内容添加到链元数据中。
  3. 更实用的是,您将看到更多自动执行的链扩展:

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

类似于.open(),但不是加载链下的文档,而是将文档重新加载到链上,只针对那个孤立的路径。

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53876251

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档