基本上,我正在读取本地文件以向用户显示数据内容。这些文件有一个元数据文本部分,后跟一个大的二进制部分。元数据包含正确解析二进制部分所需的重要信息。因此,我用来解析文件的模式如下:
我已经设置了多个FileReader来实现这一目标,而且一切似乎都在运行。但是,在开发过程中,我必须小心如何保存中间数据,以便它可用于二进制解析步骤。
这是我创建的基本代码,删除了长文件解析细节以提高可读性:
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()
发生得非常快,所以我不确定我是否幸运能及时完成。我想确定我理解这种行为。
谢谢!
答案 0 :(得分:2)
为了确保数据在$ scope上可用,我宁愿从' loadend'内部调用parseData。 parseText中的事件处理程序。否则,正如你所说,你可能只是幸运。
最佳。