![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Добрый день, вопрос в следующем:
Допустим у меня из разных мест должны загрузиться данные, содержащие об одном пользователе. Как лучше сделать проверку что и то, и то завершило загрузку? Если один лоадер, то понятное дело просто подписаться на событие Event.COMPLETE, а как быть с двумя? Чтобы проверяло, что оба загрузчика закончили свою работу. У меня пока два решения. И оба, прямо сказать, не очень меня вдохновляют: 1. Грузить другие данные только после завершения загрузки предыдущих, запускаем один лоадер, как только он закончил работу - запускаем другой. Минус очевиден - пропускная способность канала намного больше, чем требуется в данном случае, поэтому загрузка неоправданно увеличится по времени. 2. Держать два флага, содержащих информацию о том, загрузились ли загрузчик1 и загрузчик2. При выполнении загрузчика ставить его флаг в TRUE и проверять флаг другого, и если он к тому моменту равен TRUE, то переходить к требуемому коду (туда, где требуется загрузка всех данных). У этого способа минус в том, что уж больно "в лоб" да и код как то не очень удобочитаем получается. |
|
|||||
|
Регистрация: Sep 2003
Сообщений: 28
|
Реализацию нужно выбирать по задачам, но мне больше нравится второй вариант. Только достаточно одного флага. Когда сработало Event.COMPLETE, проверяем флаг: если false, то ставим в true; если true, то Event.COMPLETE уже срабатывало.
|
|
|||||
|
Регистрация: Feb 2010
Адрес: Город суеты
Сообщений: 191
|
Попробуйте использовать загрузчик FPLoader: указываем список файлов, вызываем метод start и начинается загрузка. У загрузчика есть возможность выбрать сколько файлов грузить одновременно(сколько текущих потоков может работать одновременно). Иммется событие PROGRESS для каждого файла, и общий для всех. Документация лежит по той же ссылки.
__________________
FlashPress.ru | Blog |
|
|||||
|
Я не придираюсь, но когда что-то делают в одно время называют синхронным.
Я просто все скопом вызываю и ставлю счетчик равным кол-ву вызовов. При ответе или ошибке уменьшаю его на 1 соответственно. При 0 - идем дальше.
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку. |
|
|||||
|
Регистрация: Nov 2010
Сообщений: 497
|
Цитата:
Async.applySync(function, array). Применяет синхронную функцию (т.е. возвращающую сразу "результат") к аргументам. Если что-то завершилось с ошибкой, считает, что вся операция завершилась с ошибкой (и вовзращает исходный код). Возвращает AsyncOperation. Async.applyAsync(function, arrray). Применяет асинхронную функцию к асинхронным аргументам. Например, мы загрузили данные и потом по ним будем грузить картинки. Возвращает AsyncOperation. Async.onComplete(AsyncOperation, function). Применяет функцию, когда асинхронная операция завершилась (с любым результатам). Ничего не возвращает. Async.onSuccess(AsyncOperation, function), Async.onFailure(AsyncOperation, function) - применяет функцию к результатам в случае успеха/ошибки. Небольшой бонус (совершенно на другом уровне). App.monitorOp(AsyncOperation). Умеет корреткно отображать "глобальное ожидание" приложения и выводить ошибки (считает ошибки фатальными). Итого, типичный код выглядит примерно так: function doSomething() : AsyncOperation { const op1 : AysncOperation = Net.loadXML("www.xml.info", parseSomeXml); const op2 : AsyncOperation = Net.loadImage("www.images.org/image.png"); const xmlImages = Async.applyAsync(loadImages, [op1]); return Async.applySync(showWindow, [op2, xmlImages, "op-something"); } function showWindow(image1 : BitmapData, otherImages : Array, notAnAsyncArgument : String) : void { // create and show UI window. } function loadImages(xml : SomeParsedXML) : AsyncOperation { return Async.gatherSuccess(Funcs.map(xml.images, function(img : SomeParsedImage):AsyncOperation { return Net.loadImage(img.url); })); } // somewhere in other code: function onMagicButtonClick() : void { App.monitorOp(doSomething); } |
|
|||||
|
буду краток
модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
|
Можно посмотреть в сторону http://www.as3commons.org/as3-commons-async/index.html
__________________
Отряд Котовскага |
![]() |
![]() |
Часовой пояс GMT +4, время: 17:45. |
|
|
« Предыдущая тема | Следующая тема » |
|
|