@Leo 好问题。
目前有两种方法,如果您能想到更好的方法,请告诉我们!
- 就像你说的那样,做回调嵌套(糟糕!)。
- 不要嵌套,并在孙子回调中使用
this.back()
荣誉奖:使用一些扩展 API,例如gun.open()
从父级向下加载完整文档。
this
inside.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
通过每个“返回”链,例如,从根获取完整路径:
var path = [];
this.back(function(at){ path.push(at.get) });
console.log(path.reverse().join('.'));
// 'a.b.c.d.e'
向前进:
.back()
需要改进内部链元数据的文档。
- 为您提供完整路径,而不是让您生成它,以及其他类似的常见事物,将来可能会添加到链元数据中。
- 更实际的是,您会看到更多的链扩展,它们只是为您自动化它:
所有这些想法都可以在今天的 GUN 上构建/扩展,甚至.open()
少于 50 LOC 链扩展!社区很乐意帮助您构建这些扩展!
就像类似.open()
但不是在链下加载文档,而是将文档加载到链上,仅用于那个孤立的路径。
或类似的工具,例如将模式传递给父级,以及.open()
仅加载模式中的项目而不是下面的所有内容的替代版本。
这迅速扩展到 GUN 之上的其他查询引擎,例如 SQL、Mango 或GraphQL已经存在的实时订阅!