map-watch
v1.0.0
Published
Extension to native Map classes, allowing the watching and reporting on map value changes.
Downloads
2
Readme
Map Watch
A javascript map object that can be watched for changes.
NB: Changes are only watched via the map set()/delete() methods. Deep watching of object properties is not good practice but can be achieved through other modules.
Install
npm install map-watch
To save to your package.json
npm install --save map-watch
Creating a Map
WatchMap objects are extensions of the native Map class in Javascript. You can use them in exactly the same way.
const WatchMap = require('map-watch');
let map = new WatchMap();
map.set('mykey', 'myvalue');
console.log(map.get('mykey')) // logs 'myvalue' to the console.
Watching items
To watch an item, simply use the watch() method.
map.watch('mykey', (value, oldValue)={
console.log(value, oldValue);
});
map.set('mykey', 1); // The console will log: 1 undefined
map.set('mykey', 2); // The console will log: 1 2
Watching once
To watch only the next change (like once() on events).
map.once('mykey', (value, oldValue)={
console.log(value, oldValue);
});
map.set('mykey', 1); // The console will log: 1 undefined
map.set('mykey', 2); // Nothing happens
Always fire
If you need to fire a watch when the value is set or changes and fire straight away if already set then you can set the always property of the options object.
map.set('mykey', 1); // Nothing happens yet as no watchers set
map.once('mykey', (value, oldValue)={
console.log(value, oldValue); // Never fired as value set before watcher.
});
map.once('mykey', (value, oldValue)={
console.log(value, oldValue); // Console logs: 1 undefined.
}, {always: true});
Options Object
You can supply and options object to watch() and once() as defined above.
- always boolean - Always fire watcher if valuealready set.
- context Object - Context for callbacks (the this applied).
Count Watchers
You can also count the watchers set on a key by calling countWatchers().
map.watch('mykey', (value, oldValue)={
// Do something
});
map.watch('mykey', (value, oldValue)={
// Do something
});
map.watch('mykey', (value, oldValue)={
// Do something
});
console.log(map.countWatchers('myKey')) // Logs 3.