我尝试使用fileReader读取serviceWorker中的大文件。我只是想先设置一个简单的例子,但我陷入了无限循环,我不明白为什么。这是我的代码:
.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字节后停止循环,并在第二次迭代后正确触发并解析承诺。然而,这个循环仍然被遗忘。
问题:
我坐了一会儿,现在想知道我做错了什么。也许别人有个主意。谢谢!
答案 0 :(得分:1)
尝试:
if (offset > 2048) {
resolve("We're done");
} else {
return loopOverBlob(offset);
}
我从未使用过承诺,但看起来即使在解决了这个决议之后,每次都会发生递归调用。