У меня есть следующий Java Script фрагмент коды:Wiered поведения Javascript
function upoload_TC(evt) {
var file = evt.target.files[0];
if(file.type != 'text/plain'){
evt.target.style='color:red;';
}
else{
var app_data='';
reader = new FileReader();
reader.onload = function(){
app_data = reader.result;
};
reader.readAsText(file);
if (evt.target.id[7]=='2') {
/* area of intrest begin: */
var packet_order = get_packet_order(evt.target);
console.log("1st");
var app_data1 = app_data.split('\n');
console.log("app_data: ");
console.log(app_data);
console.log("app_data1: ");
console.log(app_data1);
/* area of intrest end */
for(var i=0; i<app_data1.length; ++i){
console.log("3st");
if(app_data1[i][0] == '!'){
app_data1.splice(i,1);
--i;
console.log(app_data1);
}
console.log(app_data);
...
}
}
}
}
app_data
имеет длинную строку.
После выполнения, иногда у app_data1
нет содержимого.
Наблюдение: Когда я выполняю его шаг за шагом в отладчике, app_data1
имеет ожидаемое значение. Но если моя первая точка останова после оператора присваивания для app_data1
, она пуста.
Как это исправить?
Я нашел call_back
и promises
для решения подобных проблем для пользовательских функций. Поскольку split()
не определен мной, я думаю, что это не сработает.
Я считаю, что timeout
- это неправильный способ сделать это. Это?
Просмотрите видео окно отладчика here.
Ваше понимание неверное. Заявления, которые у вас есть, будут исполняться в указанном порядке. Журнал не будет запускаться до завершения разделения. – dman2306
Что может быть причиной вышеуказанного наблюдения? –
Я подозреваю, что код, который вы указали, не является вашим настоящим кодом, поэтому я не могу ответить на это. – dman2306