我有一个要求,我需要将模块列表传递给插件,并让它加载模块并执行一些工作。如果我通过了无法加载的模块,则应该报告一个错误,然后继续进行列表的其余部分。我被困住了,因为我不知道如何从坏模块的需求失败中恢复过来。我可以使用其他一些技术来满足此要求吗?这是一个在没有我所有其他要求的情况下简化问题的示例,我需要从失败中恢复以加载my / thing2:

define("my/thing", [], function() {
    return 'thing';
});
define("my/loader", [], function() {
    return {
        load: function(mid, require, callback) {
            console.log('inside load', arguments);

            // is there some way to recover when this require fails
            // or some other technique I can use here?
            try {
                require([mid], function(mod) {
                    console.log('inside require, mod=', mod);
                    callback(mod);
                });
            }
            catch (error) {
                // never gets here, when the require fails everything just stops
                console.log(error);
                callback("failed to load " + mid);
            }
        }
    }
});

require(["my/loader!my/thing"], function(loaded) {
    console.log('loaded', loaded);
});

require(["my/loader!my/thing2"], function(loaded) {
    console.log('loaded', loaded);
});

最佳答案

如果严格要求您忽略无效或有故障的模块,然后继续下一个模块,请在将它们放入require语句之前使用dojo/_base/lang::exists()

require(['/dojo/_base/lang', 'dojo/text!my/thing2'], function(lang, myThing2) {
    if(lang.exists(myThing2)) {
        //success
    } else {
        //failure
    }
});

10-06 07:50