# one-time

> Run the supplied function exactly one time (once)

Latest version **1.0.0** (published 2019-05-05) · MIT license · 0 weekly downloads

## Install

```sh
npm install one-time
pnpm add one-time
yarn add one-time
bun add one-time
```

## Health

**Score 23/100 (F)** — status: abandoned.

Positive: has types package; no vulnerabilities; high quality score.

Warnings: low downloads; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.0.0 |
| Published | 2019-05-05 |
| First published | 2014-09-15 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | separate (@types/one-time) |
| Module format | CommonJS |
| Dependencies | 1 |
| Unpacked size | 5.9 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 9 |
| Author | Arnout Kazemier |
| Maintainers | 3rdeden, unshift, v1 |
| Keywords | once, function, single, one, one-time, execution, nope |

## Links

- npm: https://www.npmjs.com/package/one-time
- Repository: https://github.com/3rd-Eden/one-time
- Homepage: https://github.com/3rd-Eden/one-time#readme
- Issues: https://github.com/3rd-Eden/one-time/issues
- npm.io page: https://npm.io/package/one-time

## Dependencies (1)

- [fn.name](https://npm.io/package/fn.name.md) 1.x.x

## Alternatives

- [@js-joda/timezone](https://npm.io/package/@js-joda/timezone.md) — 383.4K weekly downloads
- [chartjs-adapter-moment](https://npm.io/package/chartjs-adapter-moment.md) — 210.8K weekly downloads
- [strftime](https://npm.io/package/strftime.md) — 171.2K weekly downloads
- [vue-flatpickr-component](https://npm.io/package/vue-flatpickr-component.md) — 115.8K weekly downloads
- [timepicker](https://npm.io/package/timepicker.md) — 51.0K weekly downloads

## Recent versions

- 1.0.0 (latest) — 2019-05-05
- 0.0.4 — 2015-03-25
- 0.0.3 — 2015-01-19
- 0.0.2 — 2014-10-13
- 0.0.1 — 2014-09-15
- 0.0.0 — 2014-09-15

## README

# one-time

Call the supplied function exactly one time. This prevents double callback
execution. This module can be used on both Node.js, React-Native, or browsers
using Browserify. No magical ES5/6 methods used unlike the `once` module does
(except for the async version).

## Installation

This module is published to the public npm registry and can be installed
by running:

```sh
npm install --save one-time
```

## Usage (normal)

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'
});
```

## Usage (async)

The same pattern is available for **async** functions as well, for that you
should import that `one-time/async` version instead. This one is optimized
for **async** and **await** support. It following exactly the same as the
normal version but assumes it's an `async function () {}` that it's wrapping
instead of a regular function, and it will return an `async function() {}`
instead of a regular function.

```js
import one from 'one-time/async';

const fn = one(async function () {
  return await example();
});

await fn();
await fn();
await fn();
```

### 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 stack traces easier to understand.

## License

[MIT](LICENSE)

---
_Source: https://npm.io/package/one-time · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
