Skip to content

Instantly share code, notes, and snippets.

@koichik
Created August 5, 2011 11:21
Show Gist options
  • Save koichik/1127338 to your computer and use it in GitHub Desktop.
Save koichik/1127338 to your computer and use it in GitHub Desktop.
Fix this.event
From dc27ef175eb43e591e420c9831b4ef0a7f90f111 Mon Sep 17 00:00:00 2001
From: koichik <koichik@improvement.jp>
Date: Fri, 5 Aug 2011 20:02:47 +0900
Subject: [PATCH] Fix this.event
---
lib/events.js | 12 ++++++++++--
1 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/lib/events.js b/lib/events.js
index d275b80..fd7a9f3 100644
--- a/lib/events.js
+++ b/lib/events.js
@@ -187,11 +187,15 @@ EventEmitter.prototype.many = function(event, ttl, fn) {
EventEmitter.prototype.emit = function() {
this._events || init.call(this);
+ var previousType = this.event;
var type = arguments[0];
this.event = type;
if (type === 'newListener') {
- if (!this._events.newListener) { return false; }
+ if (!this._events.newListener) {
+ this.event = previousType;
+ return false;
+ }
}
// Loop through the *_all* functions and invoke them.
@@ -216,6 +220,7 @@ EventEmitter.prototype.emit = function() {
} else {
throw new Error("Uncaught, unspecified 'error' event.");
}
+ this.event = previousType;
return false;
}
}
@@ -250,6 +255,7 @@ EventEmitter.prototype.emit = function() {
for (var i = 1; i < l; i++) args[i - 1] = arguments[i];
handler.apply(this, args);
}
+ this.event = previousType;
return true;
}
else if (handler) {
@@ -261,9 +267,11 @@ EventEmitter.prototype.emit = function() {
for (var i = 0, l = listeners.length; i < l; i++) {
listeners[i].apply(this, args);
}
+ this.event = previousType;
return true;
}
+ this.event = previousType;
};
EventEmitter.prototype.on = function(type, listener) {
@@ -464,4 +472,4 @@ EventEmitter.prototype.listenersAny = function() {
};
-exports.EventEmitter = EventEmitter;
\ No newline at end of file
+exports.EventEmitter = EventEmitter;
--
1.7.4.1
* test1.js
** master:
real 0m3.005s
user 0m3.290s
sys 0m0.050s
** #1457:
real 0m3.884s
user 0m3.980s
sys 0m0.030s
** this fix applied:
real 0m4.384s
user 0m4.530s
sys 0m0.040s
* test2.js
** master:
real 0m3.363s
user 0m3.680s
sys 0m0.060s
** #1457:
real 0m4.264s
user 0m4.360s
sys 0m0.070s
** this fix applied:
real 0m4.441s
user 0m4.870s
sys 0m0.100s
* test3.js
* master:
real 0m18.348s
user 0m12.440s
sys 0m8.650s
** #1457:
real 0m17.727s
user 0m16.450s
sys 0m3.150s
** this fix applied:
real 0m18.016s
user 0m17.040s
sys 0m2.870s
// fastest case, single handler, no argument.
var events = require('events');
var emitter = new events.EventEmitter();
emitter.on('foo', function() {
});
for (var i = 0; i < 10E7; ++i) {
emitter.emit('foo');
}
// faster case, single handler, two arguments.
var events = require('events');
var emitter = new events.EventEmitter();
emitter.on('foo', function(arg1, arg2) {
});
for (var i = 0; i < 10E7; ++i) {
emitter.emit('foo', 'bar', 'baz');
}
// slow case, two handlers.
var events = require('events');
var emitter = new events.EventEmitter();
emitter.on('foo', function() {
});
emitter.on('foo', function() {
});
for (var i = 0; i < 10E7; ++i) {
emitter.emit('foo');
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment