如何在同一模块中调用函数

How to call a function within the same module?

本文关键字:调用 函数 模块      更新时间:2023-09-26

为了整理我的应用程序,我正努力了解RequireJS。

我有几个模块,还有一个main.js脚本。

在我的main.js中,我定义了一个包含一些AJAX函数的模块,用于进行基本的API调用。

在这个"API"模块中,我首先调用其中一个AJAX函数,该函数完成后,需要在同一个"API"模块中调用不同的AJAX函数(由于这些是异步任务,我认为这样链接它们没问题?!)。

但是,仅仅在同一个模块中调用函数名是行不通的。

那么,如何在同一模块中调用函数呢?

以下是我的"API"模块的设置:

define(function() {
    return {
        ajaxCall_A: function() {
            $.ajax({
                // settings
            }).done(function() {
                // now call ajaxCall_B
                ajaxCall_B(); // doesn't work!
            });
        },
        ajaxCall_B: function() {
            $.ajax({
                // settings
            }).done(function() {
                // finished
            });
        }
    }
}

以下将对本地对象的引用添加到ajaxCall_a的更改将解决此问题,但您最好查看JQuery promises/deferres,因为这是链接Ajax调用的更好方法。

define(function() {
    return {
        ajaxCall_A: function() {
            var self = this;
            $.ajax({
                // settings
            }).done(function() {
                // now call ajaxCall_B
                self.ajaxCall_B(); // doesn't work!
            });
        },
        ajaxCall_B: function() {
            $.ajax({
                // settings
            }).done(function() {
                // finished
            });
        }
    }
}

使用承诺的简要示例(未经测试):

define(function() {
        return {
            ajaxCall: function() {
                $.when(this.ajaxCall_A())
                 .then(this.ajaxCall_B())
                 .done(function() {
                    // finished
                 });
            },
            ajaxCall_A: function() {
                return $.ajax({
                    // settings
                });
            },
            ajaxCall_B: function() {
                return $.ajax({
                    // settings
                })
            }
        }
    }
    (function (define) {
    return {
        ajaxCall_A: function () {
            $.ajax({
                // settings
            }).done(function () {
                // now call ajaxCall_B
                define.ajaxCall_B(); // it works now!
            });
        },
        ajaxCall_B: function () {
            $.ajax({
                // settings
            }).done(function () {
                // finished
            });
        }
    }
});

试着这样使用。