在对象内部调用asynchronouscallback函数

我有这个代码:

var async = require("async"); module.exports = function(vars){ return { a: function(){ console.log("a()"); }, b: function(){ var self = this; async.series([ function(callback){ ... callback(); }, function(callback){ ... callback(); } ], function(){ self.a(); // <------- err }); } } } 

然后我打电话给b:

 var test = require("./test.js")({}); test.b(); 

但我得到这个错误: Object #<Object> has no method 'a' 。 为什么?

编辑:

对不起,这段代码实际上运行良好,但我在生产中的代码中得到了这个错误。

从这个例子(工作正常)和我的代码(不)的唯一区别是,我的演示代码直接调用:

 var test = require("./test.js")({}); test.b(); 

而我的生产代码是从另一个库中调用的:

 var my_code = require("./something.js")({}); imap_notify.on_new_mail(my_code.my_func); 

问题是外部库可能会改变上下文(用.bind(this)调用你的函数)。

您可以将对象存储在一个variables中,然后直接调用它

 module.exports = function(vars){ var obj = { a: function(){ console.log("a()"); }, b: function(){ // var self = this; // useless now async.series([ function(callback){ callback(); }, function(callback){ callback(); } ], function(){ obj.a(); // <--- now it works }); } }; return obj; } 

试试这个,不知道它是否有效

 var async = require("async"); var Item = function(){ self= this; self.a= function(){ console.log("a()"); }, self.b= function(){ async.series([ function(callback){ ... callback(); }, function(callback){ ... callback(); } ], function(){ self.a(); // <------- err }); } } module.exports = function(){ return new Item(); }