Редактировать START
Когда у меня происходит несколько асинхронных вызовов, и мне нужно что-то произойти после того, как они оба сделаны, я обычно использую логические значения для хранения, если каждый из них уже произошел,затем в третьей функции, которую они оба вызывают, я проверяю оба логических значения.
Вот как я это сделаю:
protected function viewnavigatorapplication1_preinitializeHandler(event:FlexEvent):void
{
var loader1:Loader = new Loader();
var loader2:Loader = new Loader();
loader1.addEventListener(Event.COMPLETE, loader1_completeHandler);
loader1.load(new URLRequest("http://www.whitehouse.gov"));
loader2.addEventListener(Event.COMPLETE, loader2_completeHandler);
loader2.load(new URLRequest("http://www.nasa.gov"));
}
private function loader1_completeHandler():void
{
loader1Done = true;
//Maybe do some stuff here
moveOn();
}
private function loader2_completeHandler():void
{
loader2Done=true;
//Maybe do some stuff here
moveOn();
}
private function moveOn():void
{
if(!loader1Done||!loader2Done)
return;
//Do whatever needs to be done once both asynchronous events have completed
}
Если это не ваша проблема, я думаю, вам нужно предоставитьбольше кода вместо комментариев, которые указывают на другие вещи, потому что это немного неясно.
Например, я не уверен, что вы подразумеваете под "Код в конструкторе работает, если я назначаю динамическистатическое значение, но если я попытаюсь объединить в цепочку события, чтобы получить динамическое значение и динамическое присваивание, оно хрустит ».Кроме того, поскольку нет примера данных или того, что такое rootURL, отсюда невозможно отладить, чтобы понять, что происходит не так.
Поскольку ошибок нет, нам потребуется возможность перекомпилировать некоторую часть вашегоиспользуйте локальный код для улучшения обратной связи.
Edit END
Блокировка или синхронные вызовы - ужасная идея в отношении сетевых коммуникаций из-за недостаточной надежности сетей и/ или серверы.Если внешнее приложение заблокировано для ожидания ответа перед выполнением какой-либо другой обработки, это приведет к ужасному взаимодействию с пользователем, поэтому синхронные удаленные вызовы отсутствуют.
Что происходит с синхронным вызовом, когдасервер взрывается, клиент остается заблокированным, даже если ответ не будет получен, пользователь не сможет взаимодействовать с чем-либо еще во внешнем интерфейсе, потому что он ожидает указанного ответа, который никогда не придет?Гораздо лучше, чтобы удаленные вызовы любого рода выполнялись асинхронно, то же самое относится и к локальному доступу к диску в Java (или иным образом), где использование асинхронных неблокирующих вызовов, как правило, является лучшим способом разрешения других процессов внутриприложение должно продолжаться независимо от состояния или использования на диске.
То, что вы делаете, должно работать нормально, вы делаете вызов удаленной службе, оно отвечает с некоторым результатом и поражает вашего "слушателя"или функцию «обратного вызова», то вы хотите сделать что-то с результатами, вы можете вызвать другую функцию, и данные есть.
Мне кажется, что единственное, что не происходит, это обновления после того, как факт "Это, вероятно, связано с отсутствием привязываемых метаданных / событий для диспетчеризации свойств.Проверяли ли вы результат в возвращаемом событии, ставили ли точки останова в методе, который должен вызываться после возврата данных?То, что вы делаете, вполне возможно, и даже кажется, что у вас все в порядке, но определенно есть что-то, что вы делаете неправильно, в результате чего вы не можете выполнять эту работу.Если вы можете объяснить поведение немного яснее, это поможет, а также то, что вы делаете здесь:
// ЭТО ТАМ, ГДЕ Я ПЫТАЛСЯ НАЗВАТЬ ФУНКЦИЮ, НУЖНУЮ ЗАГРУЗИТЬ ПОЗЖЕ