承诺为

时间:2017-01-20 11:53:46

标签: javascript angularjs arrays angular-promise

您好我们有一个调用服务功能的角度js控制器:

var decodedValue = StaticTableService.DecodificaAllergeni(listObj);

此服务函数获取整数数组。我们想要在StaticTableService的字符串中解码这个整数。 decodedValue将是一个字符串数组,其中每个字符串都是来自int的解码字符串。如果int number为0则不被解码。

此功能

 DecodificaAllergeni: function(allergeni)
    {
    var elenco = Array();

    var loopPromises = [];                      //Promise for loop
    for(i=0;i<allergeni.length;i++)
    {
        var idAllergene = allergeni[i];
        if(idAllergene!=0)
        {
            console.log("StaticTable IdAllergene: "+idAllergene);
            loopPromises.push(AllergeniService.get(idAllergene));
            console.log(idAllergene);
        }
    }

    //Wait all 
    $q.all(loopPromises).then(function () {
        console.log('forEach loop completed.');
    });
    },

我声明了promise数组并等待$q.all(...)等待所有呼叫结束。

每次调用都发送到AllergeniService.get(idAllergene),其中AllergeniService是具有相同元素的另一个服务,并且我将单个id与id元素匹配。如果匹配则返回单个元素。

get: function(idAllergene)
     {
       var deferred = $q.defer();                 
       for (i = 0; i < allergeni.length; i++) {

          //if(idAllergene == allergeni[i].id) 
          //   ...
       }
       console.log("Id allergene che ha chiamato: "+idAllergene);
       deferred.resolve(1);
       return deferred.promise;                  
     }

在这种情况下,返回总是延迟解析为1作为参数。 问题是这个调用仅使用第一个元素进行一次。

如何使用不同的参数调用n次函数并等待所有调用终止?

谢谢

0 个答案:

没有答案