У меня есть таблица объектов (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 миллисекунд.Хорошо, это работает, но это решение очень и очень уродливо, и поэтому я оставляю этот пост, пока кто-нибудь не скажет мне, что происходит ...