Я пытаюсь прочитать большой файл внутри serviceWorker с помощью fileReader. Я просто хочу сначала создать простой пример, но я застрял в бесконечном цикле, и я не понимаю, почему. Вот мой код:Почему мой файлReader, завернутый в Promise, зацикливается на бесконечности?
.then(function(blob) {
console.log("Let's loop out of control");
function compressAndIndexFile(my_blob) {
var file_reader = new FileReader(),
chunk_size = 1024,
offset = 0;
return new Promise(function (resolve, reject) {
file_reader.onload = function (my_event) {
// process
offset += chunk_size
if (offset > 2048) {
resolve("We're done");
}
return loopOverBlob(offset);
};
file_reader.onerror = function (my_event) {
reject(my_event);
};
function loopOverBlob(my_offset) {
var slice;
console.log("LOOPIng")
console.log(my_offset)
slice = blob.slice(my_offset, my_offset += chunk_size);
return file_reader.readAsText(slice);
}
return loopOverBlob(offset);
});
}
return compressAndIndexFile(blob);
})
Я пытаюсь остановить цикл после 2048 байт и это правильно срабатывает после того, как 2-й итерации и решает обещание. Тем не менее, цикл просто продолжает забвение.
Вопрос:
Я сижу над этим некоторое время теперь интересно, что я делаю неправильно. Может быть, у кого-то есть идея. Благодаря!
Вам нужно возвращение после разрешения/отклонения – rickythefox
'resolve' не останавливает вашу рекурсию –
ok. Позвольте мне посмотреть, поможет ли возвращение. Ха, да. Я не знал этого. Благодарю. Сделать ответ, так что я могу проверить? – frequent