簡體   English   中英

從對象內部的異步回調內部調用函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM