RequireJS:我如何处理传递依赖性失败?

时间:2015-01-16 14:09:16

标签: javascript requirejs amd

我正在使用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上遇到此问题。

1 个答案:

答案 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进行了优化。)唯一的东西我没有这样做,你的代码就是定义一个单独文件之外的模块。