Я написал javascript, который обрабатывает ввод от пользователя через html , флажок , два ввода DatePicker и два раза ввод. Пользователь должен установить флажок, чтобы он мог выбрать только один или несколько, ввести две даты для диапазона дат и ввести два временных диапазона. После ввода пользователем необходимой информации, они нажимают кнопку, которая вызывает эту функцию:
function clicked(){
var localedarr = [];
if($('input:checkbox[name=myListName]:checked').length > 0){
$('input:checkbox[name=myListName]:checked').map(function(){
localedarr.push(this.value);
});
debugtwo(localedarr);
}
else{
alert("Check name First!!");
}
}
debugtwo()
- следующая функция, которая обрабатывает данные. Внутри я пишу такой код
function debugtwo(arrName){
...some variable processing
if(x=="" || y=="" || z=="" || a=="" || betweenDate(b,c)<1 || y<=x || x == y){
alert("Invalid Field Detected!!");
}
else{
arrFor.forEach(function(elm){
var startT = elm+getMillisecondFromClock(x);
var endT = elm+getMillisecondFromClock(y);
var promiseAlls = arrName.map((eachName,i) =>{
return Promise.all([
toDate(elm),
eachName,
searchStart(startT, endT, eachName),
searchEnd(startT, endT, eachName)
]);
});
Promise.all(promiseAlls).then((allArrs) =>{
final_arr.push(allArrs[0]);
if(final_arr.length == arrName.length*arrFor.length){
//initDatatable(final_arr);
}
});
});
}
}
Проблема в том, что когда я отправляю более 1 проверенного значения из флажка, например, как два имени, Promise.all
вызывается только один раз и обрабатывает только первые данные из массива. Но когда я использую только 1 имя, даже с длинным диапазоном дат от Datepicker
, метод обещания может легко это обработать и вернуть все правильные данные для Datatable.
Я предполагаю, что метод обещания не ожидает arrFor.forEach
, точнее, цикл arrFor.forEach
не ожидает выполнения обещания первым? Что-то не так с моим кодом обещания?
К вашему сведению:
arrFor
- это массив меток времени каждого выбранного дня, отформатированный в 00:00:00, на основе диапазона дат, выбранного из DatePicker.
toDate
возврат пользовательского формата даты из отметки времени.
searchStart
, searchEnd
возвращает асинхронно значение после вызова API с устройства.
initDatatable
для печати окончательных данных в Datatable