我正在使用RequireJS 2.1.15,但是我无法获取传递给要执行的库的错误。这是一个小样本,说明了我的问题。
define("parent", ["missing"], function(){
return new Parent();
});
require(["parent"], function(parent){
alert("parent");
}, function(err){
alert("err");
});
(相应的小提琴:http://jsfiddle.net/605w0ex5/2/)
当我运行此代码时,require()
的所有成功或错误函数都不会被调用,但RequireJS会打印一条控制台消息Error: Script error for: missing
。
我的问题是我的require()
电话似乎处于不稳定状态。它既不成功也不失败,即使它明确依赖的模块之一永远不会被加载。并且永远不会加载父级,因为模块依赖于无法加载。
问题是我想在无法满足require()
电话时收到通知。 如何让RequireJS真正调用我的errback?*
我在Chrome 39和RequireJS 2.1.15上遇到此问题。
答案 0 :(得分:2)
我准备把它称为RequireJS中的一个错误,因为a)我们在FF中获得预期的行为,b)如果我们执行以下操作,我们也会得到预期的行为。
我所做的就是获取代码并创建HTML页面:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/xhtml; charset=utf-8"/>
<script type="text/javascript" src="js/require.js"></script>
</head>
<body>
<script>
require.config({
baseUrl: "js"
});
require(["parent"], function(parent){
alert("parent");
}, function(err){
console.log(err);
alert("err");
});
</script>
</body>
</html>
js
子目录包含RequireJS和名为parent.js
的文件,其中包含:
define(["missing"], function(){
function Parent () {}
return new Parent();
});
使用此设置,将按预期调用errback。我也可以将模块的名称添加到define
,它也适用于此。但是如果像你一样创建parent
模块,那么永远不会调用errback。
让我准备好把它称为bug的另一件事是,在我的一个大型应用程序中,我依靠errbacks来正确加载模块。该应用程序在多个操作系统上的多个版本的FF,IE,Chrome中进行了测试,并且可以正常运行。 (我使用它进行了非优化并使用r.js
进行了优化。)唯一的东西我没有这样做,你的代码就是定义一个单独文件之外的模块。