Я практически уверен, что этот шаблон должен существовать и иметь имя ... сейчас я назову его "шаблон ворот" ...
Вот он:
В javascript моей веб-страницы я должен запускать различные асинхронные процессы.Давайте не будем обсуждать, насколько полностью асинхронными являются js, но в любом случае я должен инициировать 2 или 3 вызова AJAX, должен быть уверен, что создание пользовательского интерфейса завершено и т. Д.
Только тогда, когда все эти процессызакончил, я хочу выполнить определенную функцию.И точно один раз.
Пример
1: cropStore loaded()
2: resizeEvent()
3: productStore loaded()
Шаблон: В конце каждого (успешного) Ajax-load-callback, конец процедуры построения GUIи т. д. Я установил соответствующий флаг с false на true и вызову gatedAction ()
onEvent( 'load',
{
.... // whatever has to happen in response to cropStored, resized, etc...
// lastly:
f1 = true; //resp f2, f3, ...
gatedAction();
}
Gate проверит флаги, вернет, если какой-либо флаг еще не установлен, только вызовет целевую функцию, если всефлаги (или как я их называю: ворота) открыты.Если все мои асинхронные предварительные условия вызывают gatedAction () ровно один раз, надеюсь, я могу быть уверен, фактическая целевая функция вызывается ровно один раз ().
gatedAction ()
{
// Gate
if ( ! f1) return;
if ( ! f2) return;
if ( ! f3) return;
// actual Action ( <=> f1==f2==f3==true )
targetFunction();
}
На практике это работает надежно.С другой стороны: я думаю, что java-типичные (не js-типичные) проблемы синхронизации / энергозависимости могут быть проигнорированы, потому что javascript не является действительно многопоточным.Afaik функция никогда не останавливается в середине этого, просто чтобы предоставить другую функцию javascript во время выполнения того же документа ...
Итак, у кого-нибудь есть имя для этого? : -)
Мне нужен этот шаблон на самом деле довольно часто, особенно со сложными бэкэнд-интерфейсами .. (и да, я думаю, я превращу вышеописанную прикладную реализацию в более повторно используемый JavaScript)... С массивом gates и целевой функцией.)