Skip to content

Commit

Permalink
Explicitly handle the case where a callback is called more than once.
Browse files Browse the repository at this point in the history
  • Loading branch information
tizzo committed Jan 13, 2016
1 parent 900d8e9 commit b34ad5f
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 4 deletions.
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,9 @@ resolver.resolve(function(error, results) {
results[3];
};
var something = new Something();
something.on('start', resolver.createCallback());
something.on('in progress', resolver.createCallback());
something.on('end', resolver.createCallback());
something.once('start', resolver.createCallback());
something.once('in progress', resolver.createCallback());
something.once('end', resolver.createCallback());
something.run(resolver.createCallback());
````

Expand Down
3 changes: 3 additions & 0 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,9 @@ class Resolver {
clearTimeout(self.timeout);
self.resolveFunction(error, self.results);
}
else if (self.results.length > self.callbacks.length) {
throw new Error('Callback called more than once.');
}
};
self.callbacks.push(callback);
return callback;
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "multiple-callback-resolver",
"version": "1.2.3",
"version": "1.2.4",
"description": "Provides a function for generating callback functions and calls a provide callback once all callbacks have completed or an error after a configurable timeout.",
"main": "index.js",
"scripts": {
Expand Down
17 changes: 17 additions & 0 deletions test/resolver.js
Original file line number Diff line number Diff line change
Expand Up @@ -61,4 +61,21 @@ describe('multiple callback resolver', function() {
one();
two();
});
it('should gracefully handle calling a callback more than once', function(done) {
var resolver = new Resolver();
var one = resolver.createCallback();
var two = resolver.createCallback();
resolver.resolve(function(error) {
should.not.exist(error);
});
one();
two();
try {
two();
}
catch (error) {
should.exist(error);
done();
}
});
});

0 comments on commit b34ad5f

Please sign in to comment.