It is also possible to use errbacks to have customized error handling appropriate to the specific use of require
. Errbacks are documented here http://requirejs.org/docs/api.html#errbacks. Basically, you can add to require
a function to be called if the load fails. It comes right after the function to be called if the load is successful.
Chin's case could be handled as:
require([path], function(content){
//need to catch errors as this will not be called;
}, function (err) {
//display error to user
});
Here's an example that tries loading from multiple places:
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);
});
});
In this example onload
would be the function called once the required code loads, and mode_path
is a string identifying the mode. What you see there is code attempting to load a mode module for an editor from 3 different locations. If mode_path
is foo
, it will try to load foo
, then ./modes/foo/foo
and then ./modes/foo/foo_mode
.
The example at requirejs.org shows how one might handle a case where they want to try multiple locations for a resource they want to make available with a well-known identifier. Presumably the entire code-base in that example requires jQuery by requiring "jquery". Whatever location jQuery happens to be located at, it becomes available to the whole code-base as "jquery".
My example does not care about making the mode known to the entire code-base through a well-known identifier because in this specific case there's no good reason to do so. The onload
function stores the module it gets into a variable and the rest of the code base gets it by calling a getMode()
method.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…