![]() |
Подскажите, как можно синхронно загрузить внешний файл?
Асинхронно - все понятно, URLLoader.load и обрабатываем COMPLETE.
Но у меня в программе рекурсия, поэтому надо ее как то приостановить, загрузить файл, добавить из него данные в общую очередь обработки и возобновить выполнение программы с места остановки. Стэк вызовов процедур примерно такой: Код:
class.Execute(); |
Надо дожидаться события загрузки.
|
Так в чем проблема... По окончании загрузки очередного элемента вызывайте опять метод. Будет та же рекурсия, только растянутая во времени...
|
Сори, я немного неправильно указал код. Там все это крутится в цикле (я уже исправил код в первом сообщении).
Проблема в том, что пока это все крутится в цикле, событие загрузки не происходит. Надо выйти из цикла, чтобы оно наступило. |
Избавьтесь от цикла.
|
Цитата:
|
Разжевываю:
1. Синхронная загрузка невозможна. 2. Получение события возможно после выполнения действия любой функции и как следствие - требуется выход из цикла. Вывод - надо избавится от цикла и запускать ProcessBlock после загрузки данных. |
эх, жаль... программа получится кривокодной... ну что ж, спасибо и на этом!
видимо придется делать что то вроде loaderContext, чтоб запоминать состояние всех переменных в классе, а после загрузки файла восстанавливать их... |
На самом деле, на мой взгляд, циклы имеет смысл использовать только для перебора чего-то там в чем-то там. Например, объектов в коллекции, элементов в массиве или свойств в объекте.
Непосредственно в логике программы при асинхронном программировании циклы ничего кроме головной боли не принесут. Что мы, собственно, и наблюдаем. :) |
Как раз так программа будет более прямокодна в вашей терминологии...
|
Цитата:
|
Цитата:
1) Надо перебрать все позиции 2) дожидаться события во время перебора Как делал я:
Добавлено через 5 минут Да еще как вариант. Вы можете предварительно загрузить весь список в некий кэш, а потом оттуда просто создавать копии экземпляров не дожидаясь загрузки, тогда ваш цикл будет работать в исходном виде, вот только загружать в кэш будете асинхронно перед этим, по сути получите то же самое. |
Цитата:
|
| Часовой пояс GMT +4, время: 01:51. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.