Карта в наборе не срабатывает, если элемент обновляется

пистолет 0.8.7, Node.js-to-Node.js, нет браузера.

Узлы успешно созданы и добавлены в tasks задавать

const Gun = require('gun');
const _ = require('lodash');
require( "gun/lib/path" );

const gun = new Gun({peers:['http://localhost:8080/gun', 'http://localhost:8081/gun']});

const watchers = [
  {
    id: '123',
    type: 'skeleton',
    stat: {
      num: 0
    }
  },
  {
    id: '456',
    type: 'snowmann',
    stat: {
      num: 0
    }
  },
  {
    id: '789',
    type: 'moose',
    stat: {
      num: 0
    },
  }
]; 

const tasks = gun.get('tasks'); 

_.forEach(watchers, function (watcher) {
  let task = gun.get(`watcher/${watcher.id}`).put(watcher);
  tasks.set(task);
});

Есть результаты .map оценка

a2task { _:
   { '#': 'watcher/123',
     '>': { id: 1506959623558, type: 1506959623558, stat: 1506959623558 } },
  id: '123',
  type: 'skeleton',
  stat: { '#': 'j8acunbf70NblJptwXWa' } }
task { _:
   { '#': 'watcher/456',
     '>':
      { id: 1506959623579.002,
        type: 1506959623579.002,
        stat: 1506959623579.002 } },
  id: '456',
  type: 'snowmann',
  stat: { '#': 'j8acunbv03sor9v0NeHs7cITj' } }
task { _:
   { '#': 'watcher/789',
     '>':
      { id: 1506959623581.002,
        type: 1506959623581.002,
        stat: 1506959623581.002 } },
  id: '789',
  type: 'moose',
  stat: { '#': 'j8acunbx03sorM0hWZdQz0IyL' } }

на стороне слушателя

const Gun = require('gun');

const gun = new Gun({peers:['http://localhost:8080/gun']});
const tasks = gun.get('tasks');
tasks.map().val(function (task) {
  console.log('task', task);
});

Но нет результатов, если одно из свойств обновлено:

_.forEach(watchers, function (watcher) {
  gun.get(`watcher/${watcher.id}`).put({
    stat: {
      num: 1
    }
  });

Зачем?

Вот код для игры с https://github.com/sergibondarenko/shared-schedule

1 ответ

Решение

Он не получает обновления, потому что вы не отображаете этот уровень. "stat" - это уже свойство, являющееся объектом, поэтому вы не получите никаких изменений.

tasks.map().map().val(function (task_stat) {
  console.log('task stat', task_stat);
});
Другие вопросы по тегам