Объявление функции внутри другой функции

у меня есть эта функция:

 charCtrl.loadDataFromToMonth= function (from,to,year) {
var url = servername+'admin/dashboard/getIncidentDepartByMonthFromTo/'+from+'/'+to+'/'+year;
//alert(url);
function onSuccess(response) {
  console.log("+++++getIncidentDepartByMonthFromTo SUCCESS++++++");

  if (response.data.success != false) {

    $scope.payloadgetIncidentDepartByMonthFromTo = response.data.data;

    var getIncidentDepartByMonthFromTo= $scope.payloadgetIncidentDepartByMonthFromTo;
    // alert('dddd'+JSON.stringify(loadedDataByMission));
    $scope.labelsf = [];
    $scope.qsd = [];
    $scope.dataf = [];
    getIncidentDepartByMonthFromTo.forEach(function(data) {
      var monthNumber=$filter('date')(data.la_date, "MM");
      $scope.labelsf.push($filter('monthName')(monthNumber));
      $scope.dataf.push(data.number);
      $scope.qsd.push('ff','ff','ff');
    //alert($scope.labelsf );
    });
    //alert( $scope.dataf );
   charCtrl.loadDataFromToMonthArrivee(from,to,year);
  } else {
    alert("failure");
  }
  //  $scope.stopSpin('spinner-0');
};

function onError(response) {
  console.log("-------getIncidentDepartByMonthFromTo FAILED-------");
  //$scope.stopSpin('spinner-0');
  console.log(response.data);
  console.log("Inside getIncidentDepartByMonthFromTo error condition...");
};

//----MAKE AJAX REQUEST CALL to GET DATA----
 ajaxServicess.getData(url,username,password, 'GET', '').then(onSuccess, onError);

 };

эта функция возвращает exemple: $scope.dataf = [’45’,’48’,’255′];

У меня есть вторая функция, кстати, та же самая функция, но она получает данные из другой службы Rest:

charCtrl.loadDataFromToMonthArrivee= function (from,to,year) {
var url = servername+'admin/dashboard/getIncidentArriveeByMonthFromTo/'+from+'/'+to+'/'+year;
//alert(url);
function onSuccess(response) {
  console.log("+++++getIncidentDepartByMonthFromTo SUCCESS++++++");

  if (response.data.success != false) {

    $scope.payloadgetIncidentArriveeByMonthFromTo = response.data.data;

    var getIncidentArriveeByMonthFromTo= $scope.payloadgetIncidentArriveeByMonthFromTo;
    // alert('dddd'+JSON.stringify(loadedDataByMission));
    $scope.labelsf = [];
    $scope.qsd = [];
    $scope.dataf = [];
    getIncidentArriveeByMonthFromTo.forEach(function(data) {
      var monthNumber=$filter('date')(data.la_date, "MM");
      $scope.labelsf.push($filter('monthName')(monthNumber));
      $scope.dataf.push(data.number);
      //$scope.qsd.push('ff','ff','ff');
      //alert($scope.labelsf );
    });
    alert('aqsz'+$scope.dataf );
  } else {
    alert("failure");
  }
  //  $scope.stopSpin('spinner-0');
};

function onError(response) {
  console.log("-------getIncidentDepartByMonthFromTo FAILED-------");
  //$scope.stopSpin('spinner-0');
  console.log(response.data);
  console.log("Inside getIncidentDepartByMonthFromTo error condition...");
};

//----MAKE AJAX REQUEST CALL to GET DATA----
ajaxServicess.getData(url,username,password, 'GET', '').then(onSuccess, onError);

  };

эта функция возвращает exemple: $scope.dataf = [’69’,’50’,’96’];

мой вопрос: есть ли способ объявить вторую функцию в первой функции и получить такой результат:
эта функция возвращает exemple: $scope.dataf = [[’45’,’48’,’255′],[’69’,’50’,’96’]];

1 ответ

  1. Я бы использовал обещания ждать второго вызова, чтобы ответить и обновить переменную в области функции (родственник функции). Что-то вроде этого:

    var aggregate = [];
    
    charCtrl.loadDataFromToMonth()
    .then(function(resp){
      return new Promise(resolve, reject){
    
        aggregate.push(resp.data); // push the response from the first call
    
        charCtrl.loadDataFromToMonthArrivee()
        .then(function(resp) {
          aggregate.push(resp.data); // push the result from the second call
          resolve(resp)
        })
      }
    })
    .then(function(resp){
    
      console.log(aggregate); // should have both results
    
    })
    

    Или еще лучше, вы можете использовать обещание.все ( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all)