我是javascript / nodejs的新手,我正在通过尝试清理它来处理一些代码。
我正在使用async nodejs库来处理使代码的异步部分更容易。
现在代码看起来像这样:
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);
}
但是,我想用另一个在对象原型上定义的命名函数替换匿名函数。由于代码的结构方式,我不知道如何创建一个新函数来传递到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();
});
}
但由于背景变化,这显然不起作用。
答案 0 :(得分:2)
除非在自身存在的同一个闭包中定义了该函数,否则你需要使用一些东西代理它:
async.forEach(self.someArr, function(someObj, callback){
self.somefunc(someObj.someProp, function(err, aNewObj) {
self.otherfunc(err, aNewObj, callback);
});
}, callback);
答案 1 :(得分:1)
如果你稍微改变你的风格,你可以很容易地完成这项工作。
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();
});
};
};