Запрос $ http.get с несколькими запросами $ http.get внутри него не выполняется должным образом

0

Я пробовал разные способы сделать это, но все они потерпели неудачу. Проблема заключается в том, что у меня есть запрос http.get, который запрашивает данные за данный день (всего за весь день), после возврата я запускаю несколько запросов http.get внутри.then() для объединения дня в смены, которые пользователь имеет предоставлена. Проблема в том, что я говорю, что у меня есть семь дней, когда я хочу запросить 3 смены в день. Я запускаю запрос, и когда день заканчивается, я записываю его в объект. Три HTTP-запроса выполняются синхронно и должны нажимать на тот день, вложенные под изменениями клавиш. То, что произойдет, это первые немногие работы, но нечетное время, которое он сдвигает на следующий день, делая итоговые смены на следующий день 4 вместо 3. В других случаях сдвиги для дня 1 и следующего дня имеют два, Это никогда не превышает то, что должно быть общим сдвигом, в данном случае 21, но балансирует себя в течение всего дня. Любая идея о том, как подойти к этому. в настоящее время то, что я делаю, выглядит примерно так

Основная функция дня:

function nextDay(startDate, endDate, processObj) {
    //console.log('I am in the next()');
    d = startDate;
    if (d <= endDate) {
      //console.log();

      da = new Date(d);
      da.setDate(da.getDate() + 1);
$http.get(WEB CALL HERE).then(function(response) {
        // Store the username, get the profile.
        dataAggregator(response.data, d, da);



      }).then(function() {
        if ($scope.reporting.shiftsEnabled === true) {

          var tempPromise = $q.defer();
          var tempCntr = 0;

          nextShift(tempPromise, tempCntr, startDate, endDate, processObj);


        } else {
          d.setDate(d.getDate() + 1);
          nextDay(d, endDate, processObj);
        }
      }, function(error) {
        console.log('Failure...', error);
      });

nextShift Call Being Made:

function nextShift(shiftPromise, cntr, startDate, endDate, processObj) {
    var d = startDate;
    if (cntr < $scope.shiftsObj.length) {


      var weekday = new Array(7);
      weekday[0] = "sunday";
      weekday[1] = "monday";
      weekday[2] = "tuesday";
      weekday[3] = "wednesday";
      weekday[4] = "thursday";
      weekday[5] = "friday";
      weekday[6] = "saturday";

      tempStartDate = new Date($scope.shiftsObj[cntr].startTime);
      tempStartDate = new Date(d.getFullYear(), d.getMonth(), d.getDate(), tempStartDate.getHours(), tempStartDate.getMinutes(), 0, 0);

      tempEndDate = new Date($scope.shiftsObj[cntr].endTime);

      if ($scope.shiftsObj[cntr].endTime < $scope.shiftsObj[cntr].startTime) {
        tempEndDate = new Date(da.getFullYear(), da.getMonth(), da.getDate(), tempEndDate.getHours(), tempEndDate.getMinutes(), 0, 0);
      } else {
        tempEndDate = new Date(d.getFullYear(), d.getMonth(), d.getDate(), tempEndDate.getHours(), tempEndDate.getMinutes(), 0, 0);
      }
        var webShiftPromise = $q.defer();
        var webShiftCallReturn = webShiftCall($scope.reporting.machineSelect.SoftwareKey, $scope.reporting.machineSelect.Address,
          processObj, tempStartDate, tempEndDate,
          $scope.reporting.hardware, webShiftPromise, cntr);

        webShiftCallReturn.then(function(retData) {


          var thePromise = $q.defer();
          shiftDataAggregator(retData, tempStartDate, tempEndDate, shiftPromise, cntr);

        }, function(error) {
          console.log('Failure...', error);
        });
      cntr++;
      nextShift(shiftPromise, cntr, startDate, endDate, processObj);
    } else {
      d.setDate(d.getDate() + 1);
      shiftPromise.resolve(nextDay(d, endDate, processObj));
    }
    return shiftPromise.promise;
  }

Любая помощь, которую кто-то может дать для совершения моих звонков, ждет, пока остальные не завершатся, поскольку кажется, что день не дожидается завершения сменой звонков: |

Теги:
http
http-get
angularjs-http

1 ответ

0

Я закончил тем, что исправил свою собственную проблему, переписав функции для запуска один за другим, а не внутри друг друга...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню