0
基本上,我正在读取本地文件以向用户显示数据内容。这些文件有一个元数据文本部分,后面是一个大的二进制部分。元数据包含正确解析二进制部分所需的重要信息。所以,我使用来解析该文件的模式如下:JavaScript FileReader:确保变量填充多个异步文件读取
- 获取文本和二进制偏移
- 解析元数据并保存信息关于二进制解析
- 使用从信息分析二进制数据第2步
我已经设置了多个文件读取器来完成此操作,并且一切似乎都正常。但是,在开发过程中,我必须小心中间数据的保存方式,以便它可用于二进制解析步骤。
这里是我创建的基本代码,使用长文件解析细节更好的可读性删除:
function setupReader(obj) {
var reader = new FileReader();
reader.addEventListener("loadend", function(evt) {
...get start/end locations for text and data sections
parseText(obj);
parseData(obj);
});
var blob = obj.file.slice(0, 58);
reader.readAsBinaryString(blob);
}
function parseText(obj) {
var reader = new FileReader();
reader.addEventListener("loadend", function(evt) {
...do lots of stuff and record new properties in obj
// save obj to scope so it's available to parse data section
$scope.file_obj = obj;
});
var blob = obj.file.slice(obj.text_begin, obj.text_end);
reader.readAsBinaryString(blob);
}
function parseData(obj) {
var reader = new FileReader();
reader.addEventListener("loadend", function(evt) {
...populate array in $scope.file_obj from binary data
});
var blob = obj.file.slice(obj.data_begin, obj.data_end);
reader.readAsBinaryString(blob);
}
我的问题是这样的模式是否保证$scope.file_obj
将在parseData()
可用?
这似乎是这样,但parseText()
发生得非常快,所以我不确定我是否幸运地完成了它的时间。我想确定我了解这种行为。
谢谢!