Чтение файлов в JavaScript с помощью Phonegap - PullRequest
0 голосов
/ 14 октября 2011

У меня есть таблица объектов (x, y, z, ...), каждая из которых содержит путь к файлу и идентификатор.И их собственные методы: getPath() и getId().

Поэтому я хочу прочитать каждый файл и сохранить данные в элемент html, на который указывает идентификатор.

Но когда я это делаю:

function readFile(path, callback, context)
{
 var reader = new FileReader();
 r.readAsText(path);
 // here if I display the objects, I've got in order x,y,z,....
 r.onloadend = function ()
               {
                  // Here is the problem
                  // If x and y has the same "path" attribute value
                  // I've got in order : y,y,z ....
                  callback(r.result, context); 
               } 
}

function main(tabObject)
{
 for (var i = -1; ++i < tabObject.length;)
  {
     readFile(tabObject[i].getPath(),
              function (result, context)
               {
                  // Doing stuff with the result
                  console.log("the id of the html tag is : " + context.getId());
                  console.log("this is what I read" + result);
               },
               tabObject[i]);

  }
}

Работает, если все пути к файлам разные.Но, например:

Если два первых объекта ('x' и 'y') имеют одинаковое значение пути (например, C://Directory/stuff.png).

Функция r.onloadend будетвызывается дважды с одним и тем же объектом (дважды с y).Я думаю, это потому, что для второго чтения (для 'y') функции не нужно больше времени для чтения файла (уже прочитанного с 'x'), и поэтому в «стеке вызовов» y сотрет x (закрытие функции, вероятно, не очень хорошо).

Я надеюсь, что кто-то может объяснить мне, что происходит, и как это исправить.

Я нашел «решение», на самом деле яиспользуйте функцию setInterval для разделения каждого времени чтения на 100 миллисекунд.Хорошо, это работает, но это решение очень и очень уродливо, и поэтому я оставляю этот пост, пока кто-нибудь не скажет мне, что происходит ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...