Lav*_*tis 5 javascript design-patterns node.js
例如,我见过这样的函数,使用起来很方便:
myFunction(data).
success(function() { // success! }).
fail(function() { // fail! });
Run Code Online (Sandbox Code Playgroud)
我看不出如何实现这一点的明显方法.在查看Node.js文档之后,这是我悲伤的尝试:
var EventEmitter = require('events').EventEmitter;
var testEmitter = function(x) {
var e = new EventEmitter();
if (x) {
e.emit('success', 'got: ' + x);
} else {
e.emit('failure', 'no x passed')
}
return e;
}
Run Code Online (Sandbox Code Playgroud)
显然,当你试图调用它时,这将不起作用:
testEmitter('hello').
success(console.log('success!')).
failure(console.log('failure!'));
// TypeError: Object #<EventEmitter> has no method 'success'
Run Code Online (Sandbox Code Playgroud)
实现这种模式的最佳方法是什么?
这可以"改进"到:
var EventEmitter = require('events').EventEmitter;
var testEmitter = function(x) {
var e = new EventEmitter();
process.nextTick(function(){
if (x) {
e.emit('success', 'got: ' + x);
} else {
e.emit('failure', 'no x passed')
}
})
var self = {};
self.success = function(f) {
e.on('success',f);
return self;
};
self.failure = function(f) {
e.on('failure',f);
return self;
};
return self;
};
testEmitter("hello").success(function(results){
console.log('success!',results);
}).failure(function(error){
console.log('failure!' + error);
})
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3735 次 |
最近记录: |