Javascript 为什么我的文件阅读器包裹在一个无限循环的承诺中?
我正在尝试使用文件读取器读取serviceWorker中的一个大文件。我只想先建立一个简单的例子,但我陷入了一个无限循环,我不明白为什么。这是我的密码:Javascript 为什么我的文件阅读器包裹在一个无限循环的承诺中?,javascript,loops,promise,filereader,Javascript,Loops,Promise,Filereader,我正在尝试使用文件读取器读取serviceWorker中的一个大文件。我只想先建立一个简单的例子,但我陷入了一个无限循环,我不明白为什么。这是我的密码: .then(function(blob) { console.log("Let's loop out of control"); function compressAndIndexFile(my_blob) { var file_reader = new FileReader(),
.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字节后停止循环,它在第二次迭代后正确触发,并解决了承诺。然而,循环只是继续被遗忘
问题:我在这上面坐了一会儿,想知道我做错了什么。也许其他人有主意。谢谢 试试看:
if (offset > 2048) {
resolve("We're done");
} else {
return loopOverBlob(offset);
}
我从未使用过promises,但看起来每次都会发生递归调用,即使在解释器启动后也是如此。您需要在resolve/reject
resolve
后返回,因为resolve不会停止您的递归OK。让我看看回报是否有用。哈,是的。我不知道。谢谢。给我一个答案,这样我就可以检查了?