我想使用精彩的async module为NodeJS编写一些不错的Javascript代码。我有一个值数组,我想在每个值上调用一个特定的函数,并在数组中累积结果:我使用async.map。不幸的是,如果我尝试调用的函数是我的类的原型函数,它无法读取变量值。
示例 这是我定义的测试“类”。
var async = require('async');
function ClassA() {
this.someVar = 367;
};
ClassA.prototype.test1 = function(param, callback) {
console.log('[' + param + ']The value in test is: ' + this.someVar);
callback(null, param + this.someVar);
};
ClassA.prototype.test2 = function() {
var self = this;
async.map([1,3,4,5], (self.test1), function(err, result){
if (err) {
console.log('there was an error')
} else {
console.log('Result is: ' + result)
}
})
};
module.exports = new ClassA();
这就是我使用它的方式
testclass.test1(1, function(err, data){});
testclass.test2();
这是输出:
[1]The value in test is: 367
[1]The value in test is: undefined
[3]The value in test is: undefined
[4]The value in test is: undefined
[5]The value in test is: undefined
Result is: NaN,NaN,NaN,NaN
正如您所看到的,通过test2
获得的使用async.map
的输出无法访问this.someVar
变量。
问题 我在这里肯定遗漏了一些东西。有人能指出我的错误,并解释为什么它不起作用?我希望367出现在那些未定义的位置。我认为这个问题与this SO question有关,但我似乎无法为我的用例找到解决方案。
感谢阅读并抱歉问题的长度!
答案 0 :(得分:3)
我不是该库的专家(事实上,我从未使用过它)。
但是在它的文档中查看这个section,我认为问题在于你传递给迭代器的是函数本身,但异步调用在它自己的上下文中起作用,这意味着函数中的this
参数不是您期望的参数。
尝试按照docs建议(使用bind)来避免这个陷阱。