如何处理循环依赖?

吉利

鉴于:

  • StringPreconditions 延伸 ObjectPreconditions
  • ObjectPreconditions取决于StringPreconditions(其方法之一返回子类)
  • Preconditions是一个网守ObjectPreconditionsStringPreconditions(确保它们都负载返回一个实例前)
  • User 取决于 Preconditions

我有以下代码:

define(["ObjectPreconditions"], function(ObjectPreconditions)
{
  console.log("Inside StringPreconditions");

  function StringPreconditions() {}
  StringPreconditions.prototype = Object.create(ObjectPreconditions.prototype);
  StringPreconditions.prototype.constructor = ObjectPreconditions;
  return StringPreconditions;
});

define(["require"], function(require)
{
  console.log("Inside ObjectPreconditions");

  // Resolve circular dependencies
  var StringPreconditions;
  require(["StringPreconditions"], function(theStringPreconditions)
  {
    StringPreconditions = theStringPreconditions;
    console.log("ObjectPreconditions finished loading StringPreconditions");
  });

  function ObjectPreconditions() {}
  ObjectPreconditions.prototype.isInstanceOf(type)
  {
    console.log("ObjectPreconditions.isInstanceOf() invoked");
    if (type === String)
      return new StringPreconditions();
  }
});

define(["ObjectPreconditions", "StringPreconditions"], function(ObjectPreconditions, StringPreconditions)
{
  console.log("Inside Preconditions");
  var Preconditions = {};

  Preconditions.requireThat(parameter) = function()
  {
    return new ObjectPreconditions(parameter);
  };
  return Preconditions;
});

define(["Preconditions"], function(Preconditions)
{
  console.log("Inside User");
  function User() {}
  User.prototype.doSomething = function()
  {
    var StringPrecondition = Preconditions.requireThat("test").isInstanceOf(String);
  }
});

问题是我有10%的时间获得此装载订单:

  • 内部用户
  • 内部先决条件
  • 内部对象前提
  • 内部StringPreconditions
  • ObjectPreconditions.isInstanceOf()(CRASH因为StringPreconditions未定义)
  • ObjectPreconditions完成加载StringPreconditions

我已经阅读了http://requirejs.org/docs/api.html#circular,但我相信他们正在做与我相同的事情。

有任何想法吗?

吉利

更新:https : //stackoverflow.com/a/42264822/14731包含ES6模块的更新答案。


我弄清楚了:我们需要创建一个“ gatekeeper”文件,该文件将定义依赖于循环依赖关系的函数。

  1. 重命名ObjectPreconditions.jsAbstractObjectPreconditions.js
  2. 创建一个新ObjectPreconditions.js文件(我们的新网守)。
  3. 移动任何循环依赖出的AbstractObjectPreconditions.jsObjectPreconditions.js
  4. 用户代码应该require(ObjectPreconditions)涉及循环依赖关系的代码(例如,子类)应该require(AbstractObjectPreconditions)

生成的代码如下所示:

define(["AbstractObjectPreconditions"], function(ObjectPreconditions)
{
  console.log("Inside StringPreconditions");

  function StringPreconditions() {}
  StringPreconditions.prototype = Object.create(ObjectPreconditions.prototype);
  StringPreconditions.prototype.constructor = ObjectPreconditions;
  return StringPreconditions;
});

define(["require"], function(require)
{
  console.log("Inside AbstractObjectPreconditions");

  function ObjectPreconditions() {}
  return ObjectPreconditions;
});

define(["AbstractObjectPreconditions"], function(ObjectPreconditions)
{
  // Gatekeeper for circular dependencies
  ObjectPreconditions.prototype.isInstanceOf(type)
  {
    console.log("ObjectPreconditions.isInstanceOf() invoked");
    if (type === String)
      return new StringPreconditions();
  }

  return ObjectPreconditions;
});


define(["ObjectPreconditions", "StringPreconditions"], function(ObjectPreconditions, StringPreconditions)
{
  console.log("Inside Preconditions");
  var Preconditions = {};

  Preconditions.requireThat(parameter) = function()
  {
    return new ObjectPreconditions(parameter);
  };
  return Preconditions;
});

define(["Preconditions"], function(Preconditions)
{
  console.log("Inside User code");
  function User() {}
  User.prototype.doSomething = function()
  {
    var StringPrecondition = Preconditions.requireThat("test").isInstanceOf(String);
  }
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何处理依赖循环匕首2

来自分类Dev

C预处理程序如何处理循环依赖关系?

来自分类Dev

如何处理Typedef结构中的循环依赖

来自分类Dev

如何处理这种循环依赖性?

来自分类Dev

如何处理Typedef结构中的循环依赖

来自分类Dev

如何处理胖子依赖

来自分类Dev

分离文件中的思维模型:如何处理循环/循环依赖性

来自分类Dev

如何处理这个循环?

来自分类Dev

如何处理无限循环

来自分类Dev

如何处理这个循环?

来自分类Dev

如何处理无限循环

来自分类Dev

如何处理异步循环?

来自分类Dev

如何处理React嵌套组件循环依赖关系?(使用es6类)

来自分类Dev

在对DSP信号链进行编码时,如何处理循环依赖性?

来自分类Dev

如何处理Fedora中两个软件包之间的循环依赖关系?

来自分类Dev

ArchLinux如何处理依赖关系冲突?

来自分类Dev

如何处理“不可安装”的依赖关系?

来自分类Dev

如何处理NodeJS中的循环

来自分类Dev

如何处理C ++中的循环组合?

来自分类Dev

如何处理循环和承诺?

来自分类Dev

如何处理while循环中的删除

来自分类Dev

如何处理延迟作业的循环

来自分类Dev

如何处理 Selenium 中的嵌套循环

来自分类Dev

事件循环如何处理JavaScript中的事件处理程序?

来自分类Dev

事件循环如何处理JavaScript中的事件处理程序?

来自分类Dev

流星如何处理依赖失败的乐观操作?

来自分类Dev

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

来自分类Dev

Node.JS如何处理重复的传递依赖项?

来自分类Dev

如何处理AWS Lambda中的大型依赖项?