从angularJS中的服务合并两个数组

时间:2016-04-20 16:11:59

标签: javascript arrays angularjs

我在合并来自我的Web服务的数据时遇到问题,该数据在我的表中发送了所选行的id,并且使用此id获取数据,这是我在控制台中得到的:

Sub IndentAllTablesByAmount()

Dim oTbl As Word.Table
  For Each oTbl In ActiveDocument.Tables
    With oTbl.Range
    .Tables(1).Rows.LeftIndent = PicasToPoints(-0.45)

    End With

  Next oTbl
End Sub

这是我的代码:

my all Liste [{ I get only the data of finalOperationsList not with the $scope.liste data}]

这就是我调用服务的方式:

.factory('gammeMonatageFactory', function($http,$q){
     var backObject = { getListOperationsById:_getListOperationsById }
     return backObject;

     function _getListOperationsById(val){            
              var defer = $q.defer();
              $http({
                  method : "GET",
                  url : "MyURL/getById:"+val
              }).then(function mySucces(response) {
                  defer.resolve(response.data);
              }, function myError(response) {
                  deferred.reject('Erreur into url '+response);
              });  

              return defer.promise;
     };        
});

任何帮助请合并2 $scope.modifierOuCreerArticle = function() { var v = $scope.OperationsList[$scope.OperationsList.length-1].Id; gammeMonatageFactory.getListOperationsById(v).then(function(Data){ $scope.liste= JSON.parse(JSON.stringify(Data)); //I get the Data of $scope.liste only here I can't get this Data outside this call }); $scope.listfinal = $scope.finalOperationsList.concat($scope.liste); console.log("my all Liste "+$listfinal); } finalOperationsList数组 谢谢你的帮助

2 个答案:

答案 0 :(得分:2)

合并两个数组时,其余调用的回调尚未执行。 因此,当设置liste数据时,您应该在回调中合并两个列表。 您可以使用空数组或一些初始数据初始化$scope.listfinal。该视图将因此而更新。

$scope.modifierOuCreerArticle = function() {    
     var v = $scope.OperationsList[$scope.OperationsList.length-1].Id;
     gammeMonatageFactory.getListOperationsById(v).then(function(Data){
         $scope.liste = JSON.parse(JSON.stringify(Data));  
         $scope.listfinal = $scope.finalOperationsList.concat($scope.liste); // concat the arrays when $scope.liste is available                         
     });
     $scope.listfinal = $scope.finalOperationsList; // or initialize the list with empty array;
     console.log("my all Liste " + $listfinal);
 }

答案 1 :(得分:1)

我从您的代码中看到的另一件事是service针对promise anti-pattern

的问题

在服务内部最好是:

function _getListOperationsById(val){ 
      //instead of create your own promise object, chaining the promise object returned by $http and return it
      return $http({
          method : "GET",
          url : "MyURL/getById:"+val
      }).then(function mySucces(response) {
          return response.data;
      }, function myError(response) {
          return $q.reject('Erreur into url '+response);
      });  
  };

如果您不需要将服务中的响应作为中间层处理,我建议直接返回结果:

function _getListOperationsById(val){ 
      //instead of create your own promise object, chaining the promise object returned by $http and return it
      return $http({
          method : "GET",
          url : "MyURL/getById:"+val
      });  
  };

其他人已经提供了解决方案,您应该在返回的promise then()函数中将它们合并在一起。