@ Лео, отличный вопрос.
В настоящее время есть два подхода, и если вы можете придумать лучший, сообщите нам!
- Как вы сказали, сделайте обратный вызовnesting (yuck!).
- Не вкладывать, и при использовании функции обратного вызова внуков
this.back()
Похвальное упоминание: использовать расширенный APIнапример gun.open()
для загрузки полного документа от родительского элемента вниз.
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
через каждую «обратную» цепочку, например, чтобы получить полный путь от root:
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()
, но вместо того, чтобы загружать документ под цепочкой, загружаяdocument создание резервной копии цепочки только для этого изолированного пути.
или аналогичные инструменты, такие как передача схемы родительскому элементу и альтернативная версия .open()
, загружающая только элементы всхема вместо всего, что ниже.
Это быстро распространяется на другие механизмы запросов поверх GUN, такие как SQL, Mango или GraphQL , которые уже существуют с подписками в реальном времени!