Javascript' undefined'在原型函数上使用async.map时的变量

时间:2013-06-02 11:59:40

标签: javascript node.js

我想使用精彩的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有关,但我似乎无法为我的用例找到解决方案。

感谢阅读并抱歉问题的长度!

1 个答案:

答案 0 :(得分:3)

我不是该库的专家(事实上,我从未使用过它)。

但是在它的文档中查看这个section,我认为问题在于你传递给迭代器的是函数本身,但异步调用在它自己的上下文中起作用,这意味着函数中的this参数不是您期望的参数。

尝试按照docs建议(使用bind)来避免这个陷阱。