Open rozek opened 1 year ago
Ah, I got s.th.:
{}
simply merges nothing - i.e., it leaves the existing object unchanged and, thus, does not invoke the event handlerconst sharedData = Gun.get('sharingTest').get('sharedData')
sharedData.put({})
sharedData.on((Data) => { console.log('sharedData: "' + JSON.stringified(Data) + '"') })
sometimes writes onto the console, sometimes it doesn't (that's why I currently use this approach in my experiments in order to avoid the event handler being called initially, i.e., after loading previous contents from localStorage - which works most of the time...) are these "race conditions"?
Sorry for bothering you!
I'm completely lost...
what I did:
const sharedData = Gun.get('sharingTest').get('sharedData')
sharedData.put({ a:'a' })
- workssharedData.put(null)
- workssharedData.put({ b:'b' })
- worksthe last step shows that the previous contents (namely { a:'a' }
) reappear again - although I previously successfully overwrote the node with a primitive!
How can that be? I am not yet using any relay - everything works locally only (albeit with "localStorage" in the background, if I understood the concepts correctly)
{}
is an empty set, so if it is merging into an existing object then no actual change occurs, however I do believe the lower level events get fired, but .on(
etc. dedups it.
if you overwrite something with a primitive, then re-save an object to it... it'll re-generate the same deterministic soul on that path, thus it'll "re-find" the old data.
var newNode = gun.get("randomID").put({b: 'b'}); sharedData.put(newNode);
will force a different node onto it, overwriting the previous and NOT re-merging with a previous node. But note: This can lead to disparity in offline apps if this happens a lot, as offline apps might not generate the same "location" to converge too.
Thank you very much for your explanation.
However, I somewhere found the "recipe" to first nullify an object and then to write a new one using the same context (I have to find where, but I'm really lost in the jungle of overlapping doc sections and wiki pages...). This recipe would contradict your explanation then.
Hello!
I'm currently trying to learn how to use Gun - please forgive me if my question turns out to be nonsense (or has been documented somewhere, but I missed that)
I know that setting a shared object triggers an event handler
This works for
null
, booleans, numbers, strings and (non-empty) objects.However, if I set an empty object, the event handler is not triggered
Is this intended?
sharedData
seems to have been changed successfully, but I can't even retrieve this value usingwhich is strange since an empty object is still an object - and setting s.th. to
null
does very well trigger an event handler...