1

我想使用奇妙的异步模块为 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

如您所见,通过test2which获得的输出async.map无法访问该this.someVar变量。

问题 我肯定在这里遗漏了一些东西。有人可以指出错误并解释为什么它不起作用吗?我希望 367 出现在那些未定义的地方。我认为这个问题与这个 SO question 有关,但我似乎无法为我的用例找到解决方案。

感谢您的阅读,并对问题的长度感到抱歉!

4

1 回答 1

3

我不是那个图书馆的专家(事实上,我从未使用过它)。

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

尝试遵循文档建议(使用绑定)来避免这个陷阱。

于 2013-06-02T12:09:16.530 回答