Sha256: 43b6d72bb23aff98af3243ab7e8d23d9af339ec46cdbdc81ded537c9899fa650

Contents?: true

Size: 1.73 KB

Versions: 286

Compression:

Stored size: 1.73 KB

Contents

# once

Only call a function once.

## usage

```javascript
var once = require('once')

function load (file, cb) {
  cb = once(cb)
  loader.load('file')
  loader.once('load', cb)
  loader.once('error', cb)
}
```

Or add to the Function.prototype in a responsible way:

```javascript
// only has to be done once
require('once').proto()

function load (file, cb) {
  cb = cb.once()
  loader.load('file')
  loader.once('load', cb)
  loader.once('error', cb)
}
```

Ironically, the prototype feature makes this module twice as
complicated as necessary.

To check whether you function has been called, use `fn.called`. Once the
function is called for the first time the return value of the original
function is saved in `fn.value` and subsequent calls will continue to
return this value.

```javascript
var once = require('once')

function load (cb) {
  cb = once(cb)
  var stream = createStream()
  stream.once('data', cb)
  stream.once('end', function () {
    if (!cb.called) cb(new Error('not found'))
  })
}
```

## `once.strict(func)`

Throw an error if the function is called twice.

Some functions are expected to be called only once. Using `once` for them would
potentially hide logical errors.

In the example below, the `greet` function has to call the callback only once:

```javascript
function greet (name, cb) {
  // return is missing from the if statement
  // when no name is passed, the callback is called twice
  if (!name) cb('Hello anonymous')
  cb('Hello ' + name)
}

function log (msg) {
  console.log(msg)
}

// this will print 'Hello anonymous' but the logical error will be missed
greet(null, once(msg))

// once.strict will print 'Hello anonymous' and throw an error when the callback will be called the second time
greet(null, once.strict(msg))
```

Version data entries

286 entries across 262 versions & 33 rubygems

Version Path
trusty-cms-6.3.1 node_modules/once/README.md
immosquare-cleaner-0.1.51 node_modules/once/README.md
boring_generators-0.15.0 tmp/templates/app_template/node_modules/once/README.md
immosquare-cleaner-0.1.50 node_modules/once/README.md
immosquare-cleaner-0.1.49 node_modules/once/README.md
immosquare-cleaner-0.1.48 node_modules/once/README.md
immosquare-cleaner-0.1.47 node_modules/once/README.md
immosquare-cleaner-0.1.46 node_modules/once/README.md
immosquare-cleaner-0.1.45 node_modules/once/README.md
immosquare-cleaner-0.1.44 node_modules/once/README.md
opal-1.8.3.rc1 stdlib/nodejs/node_modules/once/README.md
boring_generators-0.14.0 tmp/templates/app_template/node_modules/once/README.md
immosquare-cleaner-0.1.43 node_modules/once/README.md
immosquare-cleaner-0.1.42 node_modules/once/README.md
immosquare-cleaner-0.1.41 node_modules/once/README.md
immosquare-cleaner-0.1.40 node_modules/once/README.md
immosquare-cleaner-0.1.39 node_modules/once/README.md
immosquare-cleaner-0.1.38 node_modules/once/README.md
optimacms-0.1.61 spec/dummy/node_modules/once/README.md
boring_generators-0.13.0 tmp/templates/app_template/node_modules/once/README.md