Javascript 无法在回调函数中从同一模块调用模块中的方法

Javascript 无法在回调函数中从同一模块调用模块中的方法,javascript,jquery,cordova,requirejs,Javascript,Jquery,Cordova,Requirejs,我正在编写一个RequireJS模块,用于包装LG的webOS SCAP库使用的异步方法。这是一个基于Cordova的库,允许在标牌屏幕上轻松与webOS交互 SCAP方法依赖于成功和失败回调 在我的一次成功回调中,我需要调用同一模块中的另一个方法 我尝试使用var self=this,然后调用self.methodName,但它始终未定义。如果我调试,自引用似乎被正确填充,显示所有窗口数据。但该方法尚未定义 我已经能够在同一个模块中调用方法,在其他模块中调用方法,并且它可以工作。但这是我第一次

我正在编写一个RequireJS模块,用于包装LG的webOS SCAP库使用的异步方法。这是一个基于Cordova的库,允许在标牌屏幕上轻松与webOS交互

SCAP方法依赖于成功和失败回调

在我的一次成功回调中,我需要调用同一模块中的另一个方法

我尝试使用var self=this,然后调用self.methodName,但它始终未定义。如果我调试,自引用似乎被正确填充,显示所有窗口数据。但该方法尚未定义

我已经能够在同一个模块中调用方法,在其他模块中调用方法,并且它可以工作。但这是我第一次尝试从嵌套函数中调用它

代码:


我已将您的代码复制并粘贴到一个模块中,将对settings.storage.stateFile的调用替换为调用successCb的setTimeout,然后需要该模块并调用updateProgress。已正确调用getDownloadSpeed。因此,问题不在您显示的代码中。什么调用updateProgress?从不同模块触发的setInterval每秒调用updateProgress。我注意到var self=this不应该引用窗口对象。但在这个模块中是这样的。在其他模块中,它正确地引用了该模块。您的问题与then重复。由于缺乏信息,我已经投票决定结束你的问题,所以我无法投票决定在第二次投票时结束。如果您有办法将其作为副本关闭,请执行。或者删除它。或者,如果仍然存在问题,您应该编辑您的问题以突出显示仍然存在的问题。
define(["settings"], function(settings) {    
    return {
        updateProgress: function() {
            var self = this;

            // this is called when the statFile function succesfully finds the file and can read its properties
            var successCb = function(cbObject) {
                self.getDownloadSpeed(); // "self" is defined, getDownloadSpeed isn't.
            };

            var failureCb = function(cbObject) {
                // stuff here
            };

            var options = {
                // stuff here
            };

            settings.storage.statFile(successCb, failureCb, options); // SCAP method used to get file info (size, date modified etc)
        },

        getDownloadSpeed: function() {
            // stuff here
        }
    };
});