#javascript #jquery #asynchronous #promise #filereader
#javascript #jquery #асинхронный #обещание #filereader
Вопрос:
Я пытаюсь выполнить проверки для файла csv, который загружается при чтении файла, для которого я использую FileReader()
Вся логика отлично работает в режиме отладки, но не работает в выпуске.
var reader = new FileReader();
reader.readAsBinaryString(file);
var allTextLines;
new Promise(function(resolve, reject) {
allTextLines = reader.result.split(/r/);
setTimeout(() => resolve(allTextLines), 1000); // (*)
// return allTextLines;
}).then(function(result) { // (**)
alert(result); // 1
var headers = result[0].split(',');
return headers;
//return result * 2;
}).then(function(headers) { // (***)
alert(headers); // 2
var massUploadCount = 0;
for (var i = 1; i < allTextLines.length - 1; i ) {
var data = allTextLines[i].split(',');
if (data.length == headers.length) {
var tarr = [];
for (var j = 0; j < headers.length; j ) {
if (headers[j].toUpperCase().trim() === 'ITEM NUMBER') {
var itemNum_regex = /^[d]{0,10}$/;
if (!(itemNum_regex.test(data[j]))) {
console.log("hello from polo");
massUploadCount ;
com.ws.mdmui.common.showDialog("Error", 'Please enter correct value for ' headers[j] ' in row ' i);
return;
} else {
tarr.push(data[j]);
}
}
}
}
}
return massUploadCount;
});
Комментарии:
1. Режим отладки чего? Браузер? Выпуск где? На сервер? Также я не вижу, чтобы вы использовали
onload/onloadend
событие для вашего filereader, которое вызовет временные сбои, поскольку вы не будете знать, когда файл действительно был прочитан2. режим отладки в браузере Chrome. релиз означает обычно, когда я пытаюсь загрузить файл csv и проверить проверки без точек останова в Chrome. Также я использовал функцию onloadend , это не имело никакого значения
3.
alerts
вероятно, вы испортили бы фактические результаты… чего вы ожидаете отalert(result); // 2
4. @JaromandaX я исправил это, это опечатка
5. вероятно, у вас есть что-то среднее между
reader.readAsBinaryString(file);
иnew Promise(function(resolve, reject)
, что вы не показали, потому что для асинхронного прослушивателя событий onload нетreader.readAsBinaryString(file);
— или, вы, должно быть, просматриваете код, который вы разместили в каком-то отладчике