AngularJs $ q.all使用

时间:2017-05-23 13:29:29

标签: javascript angularjs

我正在使用多个异步调用,我确实得到了结果但是当我想使用我保存此结果的数组时出现了很多问题,当我看到我发现解决方案是使用$ q.all时我从来没有使用过,当我阅读文档时,我仍然不知道应该在哪里添加它,这是我的代码:

FT.getFT().then(function (result) {       
               if(result.data.success)
               {   
                for(var i=0; i<result.data.ftListe.length;i++) 
               {
                // récupérer le collaborateur de la feuille de temps par son id  
                  Compte.getComptesbyId(result.data.ftListe[i].collaborateurid).then(function(result)
                   {
                      lecollaborateur.push(result.data.col);
                   }); 

                //Get the name of the task related to the timesheet
                 Tache.getTachebyId(result.data.ftListe[i].tacheid).then(function(result)
                   {
                     Projet.getProjetbyId(result.data.tachelistes.projet_id).then(function(result)
                                {
                                  projets.push(result.data.projetsListe);
                                });    
                    task.push(result.data.tachelistes);    
                 }); 
                     // get le projet lié à cette tache par id  


              }
             $scope.ftListe = result.data.ftListe;
             $scope.task = task;
             $scope.lecollaborateur = lecollaborateur;
             $scope.projets = projets;
            console.log(result.data.message);
            }else{
                console.log(result.data.message);
            }

        });

1 个答案:

答案 0 :(得分:3)

我可以展示$q.all()如何运作,并为你的一个承诺写下示例。然后由您以相同的方式重构所有代码。我还可以用法语保存变量名称:)

$q.all()允许您解析作为all()的参数提供的承诺数组。作为承诺的结果,您将拥有一个数组,其中元素是您的承诺的相应结果。

因此,在您的情况下,在主结果中,创建一个承诺数组,如下所示:

FT.getFT().then(function (result) {       
  if(result.data.success) {   
    var comptesPromises = [];

在你的内部,而不是解决承诺,只需将所有相应的承诺添加到此数组中,如下所示:

comptesPromises.push(Compte.getComptesbyId(result.data.ftListe[i].collaborateurid));

然后在你的for之外,解决所有的承诺并将返回值分配给你的模型:

$q.all(comptesPromises).then(function(comptes) {
  comptes.forEach(function(el) {
    lecollaborateur.push(el.data.col);
  });
});

您需要注入$q才能使用它。

我希望这会有所帮助。