2017-05-19 11 views
0

私はデータベースから項目を取得するサービスを呼び出すコントローラを持っているので、これらの項目を配列に格納してから、この配列を別の関数で使用します配列の変更の私のループは、それがコールバックの行動に来るとき、私はまだかなり混乱している毎回上で開始され、私は、これがこの問題の背後にある理由だと思うので、ここに私のコードは次のとおりです。配列の長さが不安定

私のサービス:

//get a task by id 
      getTachebyId : function(id_Data){ 
       return $http.get('/api/taches/' + id_Data); 
      }, 

コントローラ:

//Récupérer les enregistrements de la feuille de temps : 
      FT.getFT().then(function (result) { 
       for(var i=0; i<result.data.ftListe.length;i++) 
       { 
       //Récupérer le collaborateur : 
        Compte.getComptesbyId(result.data.ftListe[i].collaborateurid).then(function(result) 
         { 

          lecollaborateur.push(result.data.col); 

         }); 
        // Récupérer les taches remplie dans la feuille de temps et le projet équivalent 
        Tache.getTachebyId(result.data.ftListe[i].tacheid).then(function(result) 
         { 
          task.push(result.data.tachelistes); 
         }); 


        } 
       $scope.ftListe = result.data.ftListe; 
       $scope.task = task; 
       $scope.lecollaborateur = lecollaborateur; 
       //$scope.projets = projets; 
      }); 
    //my function where I use the task array : 
    $scope.calculTotal= function(id) 
     { 
     var couttotal=0; 
     var count =0; 
     console.log(task.length); 
     for (var j=0;j<task.length;j++) 
        { 
        if(task[j].projet_id==id) 
         { //code } 
        } 
    }; 

console.log(task.length)の結果:enter image description here

どのように私は直接長さ= 5を得ることができますか?

+0

確かに長さは6です! – phuzi

答えて

1

$ http.getから得られた約束の逐次解決のために表示されます。すべての約束事を配列に入れ、Promise.all()と一緒に使って、すべての約束事が解決されたときにだけ返すことができます。

Angularアプリでも同じように$qを使用できます。

関連する問題