【发布时间】:2019-11-01 22:48:31
【问题描述】:
TLDR:如何打开文件(流式 txt)(最好是异步的,因为文件可能很大)并按顺序显示它们?
我有一个允许用户打开多个文件的页面。读取每个文件行,然后将push 添加到display 变量的数组中。然后显示数组显示为:
document.getElementById('content').innerHTML = <table id ="mainView">' + display.join('') + '</table>';.
这很好用,但是由于文件是异步加载的,因此文件行被无序推送到数组中。有没有办法设计一种使用异步文件加载但保留文件顺序的机制?最后,有没有办法在没有库/框架的情况下在 javascript 中做到这一点?
文件顺序由升序的数字命名约定决定。
log12 <- lines in this log should appear first in the table
log16
log48
log103
电流输出
log48 content
log12 content
log48 content
log103 content
预期输出
log12 content
log16 content
log48 content
log103 content
这里是我如何加载多个文件、逐行读取它们、附加到数组并在页面上显示它们的要点。
文件上传表单调用该函数:
function handleFileSelect(evt) {
var files = evt.target.files;
fileArray = [].slice.call(files);
for (var i = 0; i < fileArray.length; i++) {
console.log(fileArray[i].name);
getContents(fileArray[i]);
}
}
加载和显示每个文件的行。我应该注意到display 是一个全局数组。
function getContents(f){
if(f){
var reader = new FileReader();
reader.readAsText(f, "UTF-8");
var fileIndexname = f.name
}
reader.onload = function(evt){
var lines = evt.target.result;
// do some file splitting with regex here (removed for simplicity)
for(var i = 0; i < lines.length; i++){
display.push('<tr><td>' + lines[i] + '</td></tr>');
}
document.getElementById('content').innerHTML = '<table id ="mainView">' + display.join('') + '</table>';
}
}
【问题讨论】:
标签: javascript file asynchronous