在另一个函数中声明一个函数 [英] Declare a function inside another function

查看:106
本文介绍了在另一个函数中声明一个函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我具有此功能:

  charCtrl.loadDataFromToMonth =函数(从,到,年){
var url =服务器名+'admin / dashboard / getIncidentDepartByMonthFromTo /'+ from +'/'+ to +'/'+ year;
//警告(url);
函数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');
//警告($ scope.labelsf);
});
//警报($ scope.dataf);
charCtrl.loadDataFromToMonthArrivee(from,to,year);
} else {
alert( failure);
}
// $ scope.stopSpin(’spinner-0’);
};

函数onError(response){
console.log( ------- getIncidentDepartByMonthFromTo FAILED -------);
//$scope.stopSpin(’spinner-0’);
console.log(response.data);
console.log(内部getIncidentDepartByMonthFromTo错误条件...);
};

// ----使AJAX请求调用以获取数据----
ajaxServicess.getData(url,username,password,'GET','').then(onSuccess ,onError);

};

此函数返回示例:$ scope.dataf = ['45','48',' 255'];



我有第二个功能,顺便说一下,它具有相同的功能,但它从其他Rest服务获取数据:

  charCtrl.loadDataFromToMonthArrivee =函数(from,to,year){
var url =服务器名+'admin / dashboard / getIncidentArriveeByMonthFromToTo /'+ from +'/'+至+'/'+年;
//警告(url);
函数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' );
//警报($ scope.labelsf);
});
警报('aqsz'+ $ scope.dataf);
} else {
alert( failure);
}
// $ scope.stopSpin(’spinner-0’);
};

函数onError(response){
console.log( ------- getIncidentDepartByMonthFromTo FAILED -------);
//$scope.stopSpin(’spinner-0’);
console.log(response.data);
console.log(内部getIncidentDepartByMonthFromTo错误条件...);
};

// ----使AJAX请求调用以获取数据----
ajaxServicess.getData(url,username,password,'GET','').then(onSuccess ,onError);

};

此函数返回示例:$ scope.dataf = ['69','50',' 96'];



我的问题是:有没有一种方法可以在第一个函数中声明第二个函数并得到如下结果:
此函数返回例如:$ scope.dataf = [[''45','48','255'],['69','50','96']];

  var聚合= []; 

charCtrl.loadDataFromToMonth()
.then(function(resp){
返回新的Promise(解决,拒绝){

resp.data); //推送第一个调用的响应

charCtrl.loadDataFromToMonthArrivee()
.then(function(resp){
聚合.push(resp.data ); //从第二个调用中推送结果
resolve(resp)
})
}
})
.then(function(resp){

console.log(aggregate); //应该同时具有两个结果

})

或者更好的是,您可以使用Promise.all( https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise/all


i have this function:

 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);

 };

this function return for exemple: $scope.dataf = ['45','48','255'];

I have a second function, by the way its the same function but it gets data from other Rest service:

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);

  };

this function return for exemple: $scope.dataf = ['69','50','96'];

my question is: is there a way to declare the second function in the first fuction and get a result like this: this function return for exemple: $scope.dataf = [['45','48','255'],['69','50','96']];

解决方案

I would use promises to wait for the second call to respond and update a variable in the function scope (sibling to the function). Something like this:

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

})

Or better yet, you can use Promise.all (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all)

这篇关于在另一个函数中声明一个函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆