Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/hughsk/node-counter
Simple counter for asynchronous operations in Node.
https://github.com/hughsk/node-counter
Last synced: 12 days ago
JSON representation
Simple counter for asynchronous operations in Node.
- Host: GitHub
- URL: https://github.com/hughsk/node-counter
- Owner: hughsk
- Created: 2012-03-17T10:20:51.000Z (over 12 years ago)
- Default Branch: master
- Last Pushed: 2012-03-17T10:35:14.000Z (over 12 years ago)
- Last Synced: 2024-10-17T16:40:31.526Z (22 days ago)
- Language: JavaScript
- Homepage:
- Size: 97.7 KB
- Stars: 4
- Watchers: 3
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# counter
A counter for Node, installed with `npm install counter`. Watches changes to its value and emits an event when it hits a target, and comes in handy when you're waiting on a large number of asynchronous operations but want a smaller callback queue in memory compared to using a control flow library or similar tool.
## Usage
In the example below, we create a counter and then loop over a number of files. The counter counts up for every file in the loop, and counts down when that file is loaded. Before the async calls are complete, we listen for the "target" event then start the counter. Once it hits zero again
var counter = require('counter'),
count = counter(0);
files.each(function(err) {
count.value += 1;
fs.readFile(function(err, value) {
count.value -= 1;
});
});count.once('target', function() {
console.log('We have read every file now');
}).start();By default the counter's target is zero, but you can change this with the `target` option. Additionally, you can disable the counter after it's first triggered with the `once` option.
var counter = require('counter'),
count = counter(0, { target: 5, once: true }),
i, l = 5;count.on('target', function() {
console.log('This is only called once');
}).start();for (i = 0; i < l; i += 1) {
count.value += 1;
}count.value = 5;
If you didn't include the `once` option above, the counter would trigger twice.