一个带有参数的函数,调用它4次并保持数据分离

One function with parameters, call it 4 times and keep data separated

本文关键字:4次 调用 分离 数据 函数 一个 参数      更新时间:2023-09-26

让我解释一下

我的控制器中有这个功能

function postDashboardsData (dataType, dateFrom, dateTo) {
  Api.post('rotations/' + vm.data[0]._id + '/dashboard', angular.extend({
      type : dataType,
      date_range : {
        from : dateFrom,
        to : dateTo
      }
    }, vm.data))
    .then(function (data) {
      $scope.overallData = data;
    });
}

然后我调用这个函数4次,以便每次调用相同路由的函数时使用不同的数据执行post

postDashboardsData('overall', $scope.overall, $scope.overall1);
postDashboardsData('clicks-conversion', $scope.clicksConv1, $scope.clicksConv);
postDashboardsData('traffic-sources', $scope.traffic, $scope.traffic1);
postDashboardsData('devices', $scope.devices, $scope.devices1);

post完成时,一些数据会到达前端,以便我进行渲染。

我遇到的问题是:

唯一可以呈现的数据是我在代码中调用的最后一个函数的数据,因为变量$scope.overallData = data;已被覆盖。

我的意思是:当第一个post完成时,data带有来自第一个帖子的数据,当第二个post完成时,数据带有来自第二个帖子的信息,所以变量$scope.overallData现在保存来自第二post的信息,并删除第一个帖子中的信息,依此类推

那么,我能做些什么来执行post,但保持每个post的数据分离。

我尝试动态地这样做,这样我就不必创建4个不同的函数。

您可以从post函数中删除.then(),然后只返回promise。

function postDashboardsData (dataType, dateFrom, dateTo) {
     return  Api.post('rotations/' + vm.data[0]._id + '/dashboard',
       angular.extend({
         type : dataType,
         date_range : {
           from : dateFrom,
           to : dateTo
         }
    }, vm.data));
}

然后在调用方上使用链接,如下所示:

postDashboardsData('overall', $scope.overall, $scope.overall1)
.then(function(data){
    // assign whatever you like
})
postDashboardsData('clicks-conversion', $scope.clicksConv1, $scope.clicksConv)
.then(function(data){
    // assign another variable
});

假设overallData是一个数组

Array.prototype.push.apply($scope.overallData, data);

哦,这会让他们按照服务呼叫完成的顺序,而不是你呼叫服务的顺序。