66 lines
2.2 KiB
Markdown
66 lines
2.2 KiB
Markdown
# one-time
|
|
|
|
[](http://unshift.io)[](http://browsenpm.org/package/one-time)[](https://travis-ci.org/unshiftio/one-time)[](https://david-dm.org/unshiftio/one-time)[](https://coveralls.io/r/unshiftio/one-time?branch=master)[](http://webchat.freenode.net/?channels=unshift)
|
|
|
|
Call the supplied function exactly one time. This prevents double callback
|
|
execution. This module can be used on both node and browsers using browserify.
|
|
No magical ES5/6 methods used unlike the `once` module does.
|
|
|
|
## Installation
|
|
|
|
```
|
|
npm install one-time
|
|
```
|
|
|
|
## Usage
|
|
|
|
Simply supply the function with the function that should only be called one
|
|
time:
|
|
|
|
```js
|
|
var one = require('one-time');
|
|
|
|
function load(file, fn) {
|
|
fn = one(fn);
|
|
|
|
eventemitter.once('load', fn);
|
|
eventemitter.once('error', fn);
|
|
|
|
// do stuff
|
|
eventemitter.emit('error', new Error('Failed to load, but still finished'));
|
|
eventemitter.emit('load');
|
|
}
|
|
|
|
function example(fn) {
|
|
fn = one(fn);
|
|
|
|
fn();
|
|
fn('also receives all arguments');
|
|
fn('it returns the same value') === 'bar';
|
|
fn('never');
|
|
fn('gonna');
|
|
fn('give');
|
|
fn('you');
|
|
fn('up');
|
|
}
|
|
|
|
example(function () {
|
|
return 'bar'
|
|
});
|
|
```
|
|
|
|
### Why not `once`?
|
|
|
|
The main reason is that `once` cannot be used in a browser environment unless it's
|
|
ES5 compatible. For a module as simple as this I find that unacceptable. In addition
|
|
to that it super heavy on the dependency side. So it's totally not suitable to be
|
|
used in client side applications.
|
|
|
|
In addition to that we make sure that your code stays easy to debug as returned
|
|
functions are named in the same way as your supplied functions. Making heap
|
|
inspection and stacktraces easier to understand.
|
|
|
|
## License
|
|
|
|
MIT
|