清理Javascript / Nodejs代码
我是新来的JavaScript / nodejs,我正在努力清理它的一些代码。
我正在使用asynchronous nodejs库来处理使代码的asynchronous部分更容易。
现在代码看起来像这样:
Object.prototype.method = function(){ var self = this; // bunch of code async.forEach(self.someArr, function(someObj, callback){ self.somefunc(someObj.someProp, function(err, aNewObj) { if (err) { return callback(err); } self.someOtherArr.push(aNewObj.someOtherProp); callback(); }); }, callback); }
不过,我想用另一个在对象原型上定义的命名函数replace匿名函数。 由于代码结构的方式,我不知道如何创build一个新的函数传递到async.forEach
同时保持适当的self
价值。
我想要它看起来像:
AnObject.prototype.method = function(){ var self = this; // bunch of code async.forEach(self.someArr, self._newMethod, callback); } AnObject.prototype._newMethod = function(someObj, callback){ var self = this; self.somefunc(someObj.someProp, function(err, aNewObj) { if (err) { return callback(err); } self.someOtherArr.push(aNewObj.someOtherProp); callback(); }); }
但是,由于上下文的变化,这显然不起作用。
除非这个函数是在自我存在的同一个闭包中定义的,否则你需要使用一些东西来代理它:
async.forEach(self.someArr, function(someObj, callback){ self.somefunc(someObj.someProp, function(err, aNewObj) { self.otherfunc(err, aNewObj, callback); }); }, callback);
如果你改变一下你的风格,你可以很容易地做到这一点。
AnObject = function() { var self = this; self.method = function(){ // bunch of code async.forEach(self.someArr, self._newMethod, callback); }; self._newMethod = function(someObj, callback){ self.somefunc(someObj.someProp, function(err, aNewObj) { if (err) { return callback(err); } self.someOtherArr.push(aNewObj.someOtherProp); callback(); }); }; };