1
Дано:Как обрабатывать круговые зависимости?
StringPreconditions
расширяетObjectPreconditions
ObjectPreconditions
зависит отStringPreconditions
(один из его методов возвращает подкласс)Preconditions
является привратник кObjectPreconditions
иStringPreconditions
(убедившись, что они оба нагрузки до возвращения экземпляра)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% времени я получаю этот порядок загрузки:
- Внутри пользователя
- Внутри Предпосылками
- Внутри ObjectPreconditions
- Внутренние строковые условия
- ObjectPre conditions.isInstanceOf() (CRASH потому что StringPreconditions не определено)
- ObjectPreconditions завершил загрузку StringPreconditions
Я уже читал http://requirejs.org/docs/api.html#circular, но я считаю, что они делают то же самое я.
Любые идеи?
это может быть правильным, но я считаю, очень трудно следовать, вы можете упростить имена переменных и т.д.? –