我正在尝试解决节点服务器中的“此问题”。如果我不将worker.stuff
替换为worker.stuff.bind(worker)
,则无效。
有没有办法在工人类本身中添加bind
?每次调用函数时都使用它很无聊。
这是服务器:
var app = require("express")()
, Worker = require('./worker')
, worker = new Worker();
app.get("/stuff", worker.stuff);
worker.on('done', function () {
console.log('done')
});
app.listen(3000);
这是工人:
function Worker(options) {}
require('util').inherits(Worker, require('events').EventEmitter);
Worker.prototype.stuff = function (req, res) {
this.emit('done');
res.send();
}
module.exports = Worker;
答案 0 :(得分:2)
这是我能想到的最好的:
function Worker(options) {
var self = this;
this.stuff = function (req, res) {
self.emit('done');
res.send();
}
}
require('util').inherits(Worker, require('events').EventEmitter);
module.exports = Worker;
在构造函数中定义所有方法,并引用已关闭的self
而不是this
。
我可能会咬紧牙关并在必要时使用bind
。