Javascript require.js不';有时不能触发回调函数
这就像我两天内关于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
(
['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花时间回复,这非常有帮助。:)