jQuery 延迟代码中的错误
Bug in jQuery Deferred Code
以下代码有一个错误,即 ....promise.then(result) 正在执行而不等待文件读取完成:
doAsyncReadFromDisk = function(myReader)
{
var deferred = $.Deferred();
myReader.onload = function(event) {
deferred.resolve(event.target.result);
};
myReader.onerror = function() {
deferred.reject(this);
};
var rgReceivedFiles = document.getElementById('gdeReadFromDisk');
console.log('Selected file: ' + rgReceivedFiles.files.item(0).name);
myReader.readAsText(rgReceivedFiles.files.item(0));
return deferred.promise();
} // doAsyncReadFromDisk()
catalogFileParseCB = function(){
var fileReader = new FileReader();
var myPromise = doAsyncReadFromDisk(fileReader);
//alert('Space holder to let file read finish!');
myPromise.then(console.log(fileReader.result));
} // catalogFileParseCB
当
alert('Space holder to let file read finish!');
行未注释,文件内容正确可用。所以结论是 myPromise.then(...) 调用正在执行,无需等待延迟调用的解决。
这对文件 ~200MB(真实)数据以及较小的文件(测试数据)失败。无法定位问题,我倾向于认为问题不是
想知道是否有人可以帮助识别错误。有更好的方法吗?我们保证一次只读取一个文件,但应该扩展几 GB 的数据大小。
感谢您的宝贵时间,感谢等
.then()
的参数是一个在解决承诺时调用的函数。
myPromise.then(function() {
console.log(fileReader.result);
});
以下代码有一个错误,即 ....promise.then(result) 正在执行而不等待文件读取完成:
doAsyncReadFromDisk = function(myReader)
{
var deferred = $.Deferred();
myReader.onload = function(event) {
deferred.resolve(event.target.result);
};
myReader.onerror = function() {
deferred.reject(this);
};
var rgReceivedFiles = document.getElementById('gdeReadFromDisk');
console.log('Selected file: ' + rgReceivedFiles.files.item(0).name);
myReader.readAsText(rgReceivedFiles.files.item(0));
return deferred.promise();
} // doAsyncReadFromDisk()
catalogFileParseCB = function(){
var fileReader = new FileReader();
var myPromise = doAsyncReadFromDisk(fileReader);
//alert('Space holder to let file read finish!');
myPromise.then(console.log(fileReader.result));
} // catalogFileParseCB
当
alert('Space holder to let file read finish!');
行未注释,文件内容正确可用。所以结论是 myPromise.then(...) 调用正在执行,无需等待延迟调用的解决。
这对文件 ~200MB(真实)数据以及较小的文件(测试数据)失败。无法定位问题,我倾向于认为问题不是
想知道是否有人可以帮助识别错误。有更好的方法吗?我们保证一次只读取一个文件,但应该扩展几 GB 的数据大小。
感谢您的宝贵时间,感谢等
.then()
的参数是一个在解决承诺时调用的函数。
myPromise.then(function() {
console.log(fileReader.result);
});