Обработка нескольких массивов данных для обещания. Все в методе цикла - PullRequest
0 голосов
/ 08 ноября 2018

Я написал 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...