gpt4 book ai didi

javascript - 从对象内的异步回调中调用函数

转载 作者:太空宇宙 更新时间:2023-11-04 01:09:47 36 4
gpt4 key购买 nike

我有这个代码:

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' 。为什么?

编辑:

抱歉,这段代码实际上运行良好,但我在生产中的代码中遇到了该错误。

与此示例(可以正常工作)和我的代码(不能正常工作)的唯一区别就是我的demo代码是直接调用的:

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;
}

关于javascript - 从对象内的异步回调中调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19047041/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com