+5
-4
@@ -13,8 +13,9 @@ module.exports = once | ||
| function once (fn) { | ||
| var called = false | ||
| return function () { | ||
| if (called) return | ||
| called = true | ||
| var f = function () { | ||
| if (f.called) return | ||
| f.called = true | ||
| return fn.apply(this, arguments) | ||
| } | ||
| f.called = false | ||
| return f | ||
| } |
+1
-1
| { | ||
| "name": "once", | ||
| "version": "1.1.1", | ||
| "version": "1.2.0", | ||
| "description": "Run a function exactly one time", | ||
@@ -5,0 +5,0 @@ "main": "once.js", |
+15
-0
@@ -34,1 +34,16 @@ # once | ||
| complicated as necessary. | ||
| To check whether you function has been called, use `fn.called`: | ||
| ```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')) | ||
| }) | ||
| } | ||
| ``` |
+2
-0
@@ -11,5 +11,7 @@ var test = require('tap').test | ||
| }) | ||
| t.notOk(foo.called) | ||
| for (var i = 0; i < 1E3; i++) { | ||
| t.same(f, i === 0 ? 0 : 1) | ||
| var g = foo.call(1, 1) | ||
| t.ok(foo.called) | ||
| t.same(g, i === 0 ? 3 : undefined) | ||
@@ -16,0 +18,0 @@ t.same(f, 1) |
3434
11.35%37
8.82%48
41.18%