在执行$ q.all之前,我的帖子请求已解决

时间:2015-04-28 08:16:09

标签: javascript angularjs http angular-promise

在我的场景中,我有一个代码:

save : function ( distinta ) {

    var configDistinta = { 
        params : {
            data: $filter('date')(distinta.data , "dd/MM/yyyy") ,
            tipologia: distinta.tipologia, 
            idProdotto: distinta.elencoIngredienti[0].prodotto.id, 
            lottoProdotto: distinta.lottoProdotto,
            quantitaProdotto : distinta.quantitaProdotto,
            corpiEstranei : distinta.corpiEstranei,
            tipoConformita : distinta.tipoConformita,
            siglaControllo: distinta.siglaControllo,
            azioneCorrettiva: distinta.azioneCorrettiva,
            firmaOperatore: distinta.firmaOperatore,
            firmaResponsabile: distinta.firmaResponsabile,
        note : distinta.note,
        visualizzaDettaglio:distinta.visualizzaDettaglio
        } 
    };

    var promises = [];
    var distinta_id = null;

    // chiamata post per inserimento distinta
    return $http.post(urlDistinte, "", configDistinta).then (function(response) {
        distinta_id = response.data.id;
        console.log (response);
        console.log ("INIZIO INSERIMENTO INGREDIENTI");
          //INSERIMENTO INGREDIENTI NELLA DISTINTA,

        for (var k in distinta.elencoIngredienti) {
          if (!distinta.elencoIngredienti[k].cancel == true) {

            var configDistintaIngrediente = {params: {
              distintaBaseGelato_id : 2,
              ingrediente_id : 1,
              quantitaIngrediente : 45.56,
              lottoIngrediente : distinta.elencoIngredienti[k].lottoIngrediente } 
            };

            var p = $http.post(urlDistinteIngredienti, "", configDistintaIngrediente)
            .success(function(data) {
              alert ("OK");
            }).error(function(data, status, headers, config) {
              alert (
                "data: " + data + "\n" + 
                "status: " + status + "\n" + 
                "headers: " + headers + "\n" + 
                "config: " + config + "\n" 

                );

              console.log (config);
            });

            //promises.push (p);
          }
        }
        console.log( promises );
        console.log ("FINE INSERIMENTO INGREDIENTI");
        $q.all( promises ).then( function(data) {
                console.log ("AVVIO OPERAZIONI GESTIONE DISTINTA")
                for (var k in data ) {
                console.log(data[k]);
                };
                console.log ("FINE OPERAZIONI GESTIONE DISTINTA")
          return data;
        });
    });
  }

我看到了我的要求" post"在到达$q.all之前执行。 如何将它们插入到数组中,然后仅运行$q.all

1 个答案:

答案 0 :(得分:1)

您的promises数组为空,这就是在您提出其他请求之前执行$q.all的原因。

为了工作,您需要在promises数组中填写您的请求,如下所示:

promises.push($http.post(urlDistinte, "", configDistinta).then (function(response) {...}));
promises.push($http.post(urlDistinteIngredienti, "", configDistintaIngrediente)...);

然后$q.all将在所有请求返回成功后执行。