Javascript require.js不';有时不能触发回调函数

Javascript require.js不';有时不能触发回调函数,javascript,module,callback,requirejs,Javascript,Module,Callback,Requirejs,这就像我两天内关于require.js的第三个问题,问题是我有一个包含以下模块的项目: main.js res.js juego.js 在主文件中,所有模块加载后必须调用的回调有时会触发,有时不会触发 我不会发布任何代码,因为我不认为它有什么问题,但我必须指出,这不可能是加载顺序的问题,因为我的文件彼此之间没有任何依赖关系。这真的很奇怪,我的文件也不太大(第一行73行,第二行18行) 所以问题是,有什么不对劲?是require.js bug还是其他什么 编辑:以下是我的模块代码: main.js

这就像我两天内关于require.js的第三个问题,问题是我有一个包含以下模块的项目:

  • main.js
  • res.js
  • juego.js
  • 在主文件中,所有模块加载后必须调用的回调有时会触发,有时不会触发

    我不会发布任何代码,因为我不认为它有什么问题,但我必须指出,这不可能是加载顺序的问题,因为我的文件彼此之间没有任何依赖关系。这真的很奇怪,我的文件也不太大(第一行73行,第二行18行)

    所以问题是,有什么不对劲?是require.js bug还是其他什么

    编辑:以下是我的模块代码:

    main.js:

    require
    (
        ['cliente/juego', 'cliente/res'], 
        function (juego, res) 
        {
            function main () 
            {
                alert('ok');
            }
    
            window.addEventListener('load', main, false);
        }
    );
    
    res.js:

    define
    (
        function () 
        {
            return (function () 
            {
                var recursos = 
                {
                    soldado : { ruta : 'res/imagenes/soldados/1.png', tipo : 'Image', fuente : null }
                };
                var metodos = {};
                var cargados = 0;
                var totales = 0;
                var listos = false; // Todavía no se han cargado los recursos
    
                function terminarCarga (evento) 
                {
                    // Cada vez que se cargue un recurso se incrementará el progreso
                    cargados++;
    
                    if (cargados == totales) 
                    {
                        listos = true; // Recursos cargados y listos para usarse
    
                        // Acción a seguir una vez cargados todos los recursos
                    }
                }
    
                metodos.getTotales = function () 
                {
                    return totales;
                }
    
                metodos.getListos = function () 
                {
                    return listos;
                }
    
                metodos.cargar = function () 
                {
                    // Carga todos los recursos
    
                    var recurso;
    
                    for (var i in recursos) 
                    {
                        totales++;
                        recurso = recursos[ i ];
    
                        if (recurso.tipo == 'Image') 
                        {
                            recurso.fuente = new Image;
                            recurso.fuente.onload = terminarCarga;
                            recurso.fuente.src = recurso.ruta;
                        }
                        else
                        {
                            recurso.fuente = new Audio;
                            recurso.fuente.addEventListener('loadeddata', terminarCarga, false);
                            recurso.fuente.src = recurso.ruta;
                        }
                    }
                }
    
                metodos.get = function (nombre) 
                {
                    return recursos[ nombre ].fuente;
                }
    
                return metodos;
            })();
        }
    );
    
    juego.js:

    define
    (
        function () 
        {
            return (function () 
            {
                var metodos = {};
                metodos.getContexto = function () 
                {
                    // Recordar llamar ésta función una vez cargada la página
                    this.canvas = document.querySelector('canvas');
                    this.contexto = this.canvas.getContext('2d');
                }
    
                return metodos;
            })();
        }
    );
    

    主功能中的警报仅在10%的情况下弹出。

    我以前见过随机加载错误,不知道这是否是您看到的原因。如果是的话,看看这个;有时,web服务器本身就是罪魁祸首。反正是我的情况

    编辑:

    每次都肯定会调用回调。我更改了main中的代码,使其如下所示:

    require(
        ['cliente/juego', 'cliente/res'], 
    
        function (juego, res) {
            console.log(juego, res);
    
            function main () {
                alert('ok');
            }
    
            window.addEventListener('load', main, false);
        }
    );
    
    我在控制台中得到这个输出:

    Object {getContexto: function}
    
    Object {getTotales: function, getListos: function, cargar: function, get: function}
    
    编辑:


    我想这就是您要寻找的:

    我以前见过随机加载错误,不知道这是否是您看到的原因。如果是的话,看看这个;有时,web服务器本身就是罪魁祸首。反正是我的情况

    编辑:

    每次都肯定会调用回调。我更改了main中的代码,使其如下所示:

    require(
        ['cliente/juego', 'cliente/res'], 
    
        function (juego, res) {
            console.log(juego, res);
    
            function main () {
                alert('ok');
            }
    
            window.addEventListener('load', main, false);
        }
    );
    
    我在控制台中得到这个输出:

    Object {getContexto: function}
    
    Object {getTotales: function, getListos: function, cargar: function, get: function}
    
    编辑:


    我想这就是你想要的:

    问题不在于RequireJS或如何使用RequireJS。问题是,有时
    load
    事件发生在
    window.addEventListener('load',main,false)之前被执行。我打赌如果您将
    main.js的主体更改为以下内容,它将始终有效:

    require(['cliente/juego', 'cliente/res'], function (juego, res) {
        console.log('ok');
    });
    
    您可能需要使用,它可以处理类似这样的问题。比如:

    require(['domReady', 'cliente/juego', 'cliente/res'], function (domReady, juego, res) {
        domReady(function () {
            alert('ok');
        });
    });
    

    问题不在于RequireJS或如何使用RequireJS。问题是,有时
    load
    事件发生在
    window.addEventListener('load',main,false)之前被执行。我打赌如果您将
    main.js的主体更改为以下内容,它将始终有效:

    require(['cliente/juego', 'cliente/res'], function (juego, res) {
        console.log('ok');
    });
    
    您可能需要使用,它可以处理类似这样的问题。比如:

    require(['domReady', 'cliente/juego', 'cliente/res'], function (domReady, juego, res) {
        domReady(function () {
            alert('ok');
        });
    });
    

    Chrome和Firefox都会出现这种情况,奇怪的是,我没有看到任何日志错误/消息:/我怎么能看到?错误?它不会抛出任何错误,就像我说的那样,这很奇怪,但我注意到当我刷新时它不工作,当我在一个新选项卡中打开它时,它会触发,只有90%的方法是在刷新时脚本运行。require.js也有一些其他奇怪的问题,例如,当我声明上面显示的同一个单例时,调用括号在不同的行中,它返回未定义,但在我当前的模型中运行正常。Chrome和Firefox出现这种情况,奇怪的是,我没有看到任何日志错误/消息:/我能看到的任何方式?错误?它不会抛出任何错误,就像我说的那样,这很奇怪,但我注意到当我刷新时它不工作,当我在一个新选项卡中打开它时,它会触发,只有90%的方法是在刷新时脚本运行。require.js也有一些其他奇怪的问题,例如,当我声明上面显示的同一个单例时,调用括号在不同的行中,它返回未定义,但在我当前的模型中运行正常。谢谢!是的,这是DOM的一个问题,我实现了domReady解决方案,它在100%的情况下都能工作。感谢Bill花时间回复,这非常有帮助。:)非常感谢。是的,这是DOM的一个问题,我实现了domReady解决方案,它在100%的情况下都能工作。感谢Bill花时间回复,这非常有帮助。:)