viral trata que moto hoy javascript requirejs

javascript - trata - Captando los errores de carga del módulo y procesándolos



video viral de la moto (4)

Estoy tratando de cargar algún contenido utilizando require.js. Si el contenido no existe, me gustaría detectar el error y notificarlo al usuario.

En firebug puedo ver dos errores:

"NetworkError: 404 no encontrado

... y luego unos segundos después:

var e = new Error(msg + ''/nhttp://requirejs.org/docs/errors.html# Load timeout for modules: modules/messages/messages http://requirejs.org/docs/errors.html#timeout

Mi código se parece a:

require([path], function(content){ //need to catch errors as this will not be called; });

¿Cómo se uniría a los eventos requeridos? ¿Alguna idea?


¿Intentó anular el requirejs.onError como se muestra here ?

Funcionó para mí después de configurar catchError tan cierto como esto:

require.config({catchError:true});

antes de llamar a cualquier función define() o require() .


Puede usar la función requirejs.onError como:

requirejs.onError = function (err) { if (err) { //Reload } else { throw err; } };

También puede usar err.requireType para detectar errores específicos como los tiempos de espera


También es posible utilizar errores para tener un manejo personalizado de errores apropiado para el uso específico de require . Los errores son documentados aquí http://requirejs.org/docs/api.html#errbacks . Básicamente, puede agregar para require que se llame a una función si la carga falla. Viene justo después de la función a llamar si la carga es exitosa.

El caso de Chin podría ser manejado como:

require([path], function(content){ //need to catch errors as this will not be called; }, function (err) { //display error to user });

Aquí hay un ejemplo que intenta cargar desde múltiples lugares:

require([mode_path], onload, function (err) { if (mode_path.indexOf("/") !== -1) // It is an actual path so don''t try any further loading throw new Error("can''t load mode " + mode_path); var path = "./modes/" + mode_path + "/" + mode_path; require([path], onload, function (err) { require([path + "_mode"], onload); }); });

En este ejemplo, onload sería la función llamada una vez que se cargue el código requerido, y mode_path es una cadena que identifica el modo. Lo que ve es un código que intenta cargar un módulo de modo para un editor desde 3 ubicaciones diferentes. Si mode_path es foo , intentará cargar foo , luego ./modes/foo/foo y luego ./modes/foo/foo_mode .

El ejemplo en requirejs.org muestra cómo se puede manejar un caso en el que desean probar varias ubicaciones para un recurso que desean que esté disponible con un identificador conocido. Presumiblemente, toda la base de código en ese ejemplo requiere jQuery al requerir "jquery". Cualquiera que sea la ubicación en la que esté ubicada jQuery, estará disponible para toda la base de código como "jquery".

A mi ejemplo no le importa hacer que el modo sea conocido por toda la base de código a través de un identificador conocido porque en este caso específico no hay una buena razón para hacerlo. La función onload almacena el módulo que recibe en una variable y el resto de la base del código lo obtiene al llamar al método getMode() .


establecer la función onError requirejs:

requirejs.onError = function (err) { if (err.requireType === ''timeout'') { // tell user alert("error: "+err); } else { throw err; } };

Si desea configurar un evento, puede enlazar y desencadenar un objeto global. Como:

$("body").bind("moduleFail",function(){ alert("Handling Event") }); requirejs.onError = function (err) { if (err.requireType === ''timeout'') { $("body").trigger({type:"moduleFail",err:err}) } else { throw err; } }; require(["foo"],function(foo){ alert("loaded foo" + foo) })