大约需要异步

About requirejs asynchronous

本文关键字:异步      更新时间:2023-09-26

我有两个js文件:

//loading.js
define(function () {
    function Loading(config) {
    }
    Loading.prototype.show = function () {
    };
    Loading.prototype.hide = function () {
    };
    return function (config) {
        return new Loading(config);
    };
});
//util.js
define(function () {
    var util = {};
    util.loading = function (config) {
        var result = null;
        //I want this code synchronous
        require(["loading"],function (Loading) {
            result = Loading(config);
        });
        //there will be result null because of asynchronous
        return result;
    };
    return util;
});

目前,我是这样解决这个问题的:

define(["loading"],function (Loading) {
    var util = {};
    util.loading = function (config) {
        return  Loading(config);
    };
    return util;
});

但是我不喜欢这样。
我想知道是否需要同步加载js文件。
如果没有,有办法解决这个问题吗?
我觉得这个问题需要.js同步,感觉答案并不能解决我的问题

第二个代码段的替代方法是:

define(function (require) {
    var Loading = require("loading");
    var util = {};
    util.loading = function (config) {
        return  Loading(config);
    };
    return util;
});
但请注意,这仍然是异步加载名为"loading"的模块,即使它看起来是同步的。 问题是浏览器中的RequireJS总是异步加载模块。即使看起来是同步的,也是如此。RequireJS旨在加载符合异步模块定义(AMD)规范的模块,这是加载模块的固有异步方法。如果你想要看起来同步并且实际上同步的东西,你应该切换到同步工作的模块规范。