JSON-Patch icon indicating copy to clipboard operation
JSON-Patch copied to clipboard

Optional observe callback not called

Open hamptonsmith opened this issue 3 years ago • 1 comments

Hey folks! Thanks for an awesome library.

Am I misreading the observe() documentation regarding the optional callback? Documentation says "When changes are detected, the optional callback is called", but I'm not seeing that behavior:

Welcome to Node.js v16.14.2.
Type ".help" for more information.
> var fastJsonPatch = require('fast-json-patch')
undefined
> var doc = {};
undefined
> fastJsonPatch.observe(doc, function(p) { console.log(p); })
{ /* snip */ }
> doc.foo = 'bar';
'bar'
>

I'm expecting to see the patch array console.log()'d via the callback, but the callback is never called.

Calling generate() flushes the changes and I then see them printed via the callback.

hamptonsmith avatar Aug 07 '22 18:08 hamptonsmith

I can confirm that the callback is not called:

import * as JSONPatch from "fast-json-patch";

const obj = {
  foo: "bar",
  baz: "qux",
  quux: 1,
};

let numCalls = 0;
const o = JSONPatch.observe(obj, (patches) => {
  numCalls++;
});


obj.foo = "baz";
obj.baz = "quux";
obj.quux = 2;
console.log(numCalls); // <- expected 0 got 0
// The observe callback is driven by a 0 duration timeout so we have to wait for another run through the event loop...
setTimeout(()=>{
  console.log(numCalls); // <- expected 1 got 0  
  JSONPatch.generate(o);
  console.log(numCalls); // <- expected 1 got 1
}, 100);

Ghirigoro avatar Sep 24 '22 18:09 Ghirigoro