我是JS的新手。我的主要语言是Java。所以我完全与以下代码混淆。想法是获取一堆文件,对其进行解析,获取一个唯一的字符串,创建一个对象并将其推入结果数组,该数组是一个全局变量。然后,我需要对其进行字符串化并做其他一些事情。
dropArea.addEventListener('drop', handleDrop, false);
var resultArray = {payers: []};
function handleDrop(event) {
let files = event.dataTransfer.files;
processFiles(files, processPayersArray);
}
function processFiles(files, callback) {
([...files]).forEach(file => processSingleFile(file));
callback();
}
function processSingleFile(file) {
let reader = new FileReader();
reader.onload = (function(reader) {
return function() {
reader.result
.split('\n')
.filter(s => s.includes('Плательщик='))
.map(s => s.split('=')[1].trim())
.filter(function(s, pos, arr) {
return arr.indexOf(s) === pos;
})
.forEach(s => resultArray.payers.push(new PayerObj(s)));
}
})(reader);
return reader.readAsText(file, WIN1251);
}
function processPayersArray(array) {
console.log("Array:");
console.log(array);
let json = JSON.stringify(array);
console.log("Json: ");
console.log(json );
}
控制台输出完全使我感到困惑:
Array:
{payers: Array(0)}payers: (4) [PayerObj, PayerObj, PayerObj, PayerObj]
Json:
{"payers":[]}
出了什么问题?函数 processPayersArray 是函数 processFiles 的回调,它必须在([... files])。forEach(file => processSingleFile(file))操作之后启动。 / p>