[英]Calling a function from inside async's callback inside an object
我有以下代碼:
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)
調用函數)。
您可以將對象存儲在一個變量中,然后直接調用它
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();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.