Использование URLLoader.load внутри цикла for - PullRequest
2 голосов
/ 23 апреля 2011


Я создаю веб-сайт с помощью Adobe Flash Professional CS5.
Я пытаюсь прочитать содержимое текстового файла с помощью URLLoader.load (путь) внутри цикла for.
Путь меняется на каждой итерации.
Когда я отслеживаю данные из метода обработчика событий, он возвращает только содержимое текстового файла последнего пути.
Похоже, что он вызывает метод-обработчик события только после того, как цикл for завершен.

КОД:

var myData:URLLoader = new URLLoader();

myData.addEventListener(Event.COMPLETE, onLoaded);

function onLoaded(e:Event):void
{
trace(myData.data);
}

for (var o = 0; o < filesArray.length; o++)
{
    for (var p = 0; p < filesArray[o].length; p++)
    {
        if (filesArray[o][p] == "category.txt")
        {
            path = "C:\\inetpub\\wwwroot\\" + filesArray[o][0] + "\\" + filesArray[o][p];
            myData.load(new URLRequest(path));
            trace(path);
        }
    }
}

Это вывод:

C: \ Inetpub \ Wwwroot \ 0001 \ category.txt
C: \ Inetpub \ Wwwroot \ 0002 \ category.txt
C: \ Inetpub \ Wwwroot \ 0003 \ category.txt
C: \ Inetpub \ Wwwroot \ 0004 \ category.txt
C: \ Inetpub \ Wwwroot \ 0005 \ category.txt
Ювелирные изделия

Как я уже сказал, "Jewlery" - это содержимое "C: \ inetpub \ wwwroot \ 0005 \ category.txt".

Я пытался изменить метод "onLoaded", чтобы он возвращал строку вроде этого:

function onLoaded(e:Event):String
{
    return myData.data.toString();
}

Это внутри цикла for:

trace(myData.load(new URLRequest(path)));

Тогда я получил это как мой вывод:

не определено
C: \ Inetpub \ Wwwroot \ 0001 \ category.txt
не определен
C: \ Inetpub \ Wwwroot \ 0002 \ category.txt
не определен
C: \ Inetpub \ Wwwroot \ 0003 \ category.txt
не определено
C: \ Inetpub \ Wwwroot \ 0004 \ category.txt
не определен
C: \ inetpub \ wwwroot \ 0005 \ category.txt

Я также пытался преобразовать цикл for в цикл while, тот же результат.
Почему это так?
Если метод URLLoader.load плохо работает внутри цикла for, и я ничего не могу с этим поделать, есть ли другой способ чтения простого текста из файлов, например, FileStream или что-то еще? (Я новичок в ActionScript из C #)

Заранее спасибо,
Freddy.

Ответы [ 2 ]

1 голос
/ 23 апреля 2011

Вы не предоставляете загрузчику достаточно времени для загрузки текстовых файлов. Ваш компьютер намного быстрее, чем скорость сети, поэтому, вероятно, даже до того, как загрузчик начнет загружать первый файл, он будет вынужден загрузить второй, чем следующий, и так далее. И последний - единственный, который успевает загрузить.

Вам нужно подождать, пока каждый из них фактически не завершит загрузку, прежде чем начинать следующую. Это не будет работать в цикле, вам нужно поместить имя в массив, затем установить в него индекс, инициализировать первый элемент, начать загрузку, затем в событии onLoaded получить файл, увеличить индекс и перейти к загрузке следующего текстовый файл, пока вы не закончите.

И да, вы можете использовать только один загрузчик для всех ваших файлов. Решение с несколькими загрузчиками также будет работать, но не потому, что вы просто используете несколько загрузчиков, а снова, потому что каждый из них не будет прерываться другим.

1 голос
/ 23 апреля 2011

Этот учебник и пример кода охватывают предварительную загрузку в несколько файлов http://manewc.com/2008/09/02/preloading-multiple-image-demo/

Возможно, проблема с вашим кодом в том, что у вас есть только один URLLoader для всех файлов. Вам необходимо создать новый объект загрузки для каждого файла.

...