gun.map (callback) `TypeError: Gun.log.once не является функцией` - PullRequest
0 голосов
/ 07 марта 2020

Я наткнулся на GunDB и начал играть с ним (версия 0.2020.301), чтобы посмотреть, как он обрабатывает мою структуру данных. При запросе данных я столкнулся со странной ошибкой.

Данные:

var person = { name: "Bob", id: "person1" }
var event = {
    id: "event1",
    name: "Festival",
    startDate: new Date("2020-02-20"),
    endDate: new Date("2020-02-30"),
    location: "New York"
}
var event2 = {
    id: "event2",
    name: "Race",
    startDate: new Date("2020-03-27"),
    endDate: new Date("2020-03-29"),
    location: "London"
}

Структура:

gun.get(person.id).put(person);
gun.get(event.id).put(event);
gun.get(event2.id).put(event2);

gun.get(event.id)
    .get("people")
    .set(person);
gun.get(event2.id)
    .get("people")
    .set(person);
gun.get(person.id)
    .get("events")
    .set(event);
gun.get(person.id)
    .get("events")
    .set(event2);

Примеры использования:

Учитывая, что я нахожусь в узле Bob,

  1. Показать все имена событий
  2. Показать все события, которые произошли в New York

Кому Начните с того, что я просто хочу посмотреть, смогу ли я найти все события, на которые пошел Боб:

gun.get(person.id)
    .path("events")
    .map()
    .once(console.log);

Вывод:

{ _: { '#': 'k7htdlma06c5sVnIukcZRil' } } 'k7htdlma06c5sVnIukcZRil'
{ _: { '#': 'k7htdlma0agTZMyZAqNUrcG' } } 'k7htdlma0agTZMyZAqNUrcG'

Я понимаю, что Gun ссылается на свой собственный идентификатор, скорее чем объект, в set. Структура данных более или менее соответствует ожиданиям. Как я могу перечислить весь объект здесь?

Далее, запрос location. map(), кажется, правильная функция для работы, но я не уверен, как ее использовать. Я не нашел документацию явно очевидной, поэтому после осмотра inte rnet я наткнулся на этот вопрос StackOverflow . Основываясь на принятом ответе, я подозреваю, что должен выполнить этот запрос:

gun.get(person.id)
    .path("events")
    .map(e => e.location === "New York")
    .once(console.log) //.on(console.log) and .val(console.log) yield the same error

При выполнении я получаю следующий вывод:

<projectPath>/node_modules/gun/gun.js:1859
    Gun.log.once("mapfn", "Map functions are experimental, their behavior and API may change moving forward. Please play with it and report bugs and ideas on how to improve it.");
                                ^

TypeError: Gun.log.once is not a function
    at Gun.chain.map (<projectPath>/node_modules/gun/gun.js:1859:12)
    at Object.<anonymous> (<projectPath>/test.js:66:6)
    at Module._compile (internal/modules/cjs/loader.js:689:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10)
    at Module.load (internal/modules/cjs/loader.js:599:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
    at Function.Module._load (internal/modules/cjs/loader.js:530:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:742:12)
    at startup (internal/bootstrap/node.js:283:19)
    at bootstrapNodeJSCore (internal/bootstrap/node.js:743:3)

Кроме моего вопроса после первого запроса, я Хотелось бы знать следующее:

  1. Правильно ли я настраиваю структуру?
    • объекты обрабатывают данные, а Gun обрабатывает отношения:
    • gun.get(event.id).get("people").set(person)
    • gun.get(person.id).get("events").set(event)
  2. Am I правильно запрашивать?
  3. Как я могу получить желаемые результаты?
...