Skip to content Skip to sidebar Skip to footer

How Do I Manage Timing Dependencies With Multiple Parallel $.post And Async Lib?

I've this jQuery code where second $.post() relies on first $.post() execution and this could be a problem if first one is not done yet or fail during execute or second one start b

Solution 1:

As requested, the async lib is just fabulous - on node server-side or in the browser. Here is the lib https://github.com/caolan/async

Since you are doing these in parallel, you want to do:

function doLotsOfStuff(done) {
    async.parallel([
       function(cb) {
         $.post(Routing.generate('productoGuardarPasoCinco'), $form.serialize(), 'json').done(function (data, textStatus, jqXHR) {
           if (data.entities !== "undefined" || data.entities != "") {
             cb(null,data.entities.paises);
           } else {
             cb();
           }
         }).fail(function () {
           cb("error");
         });
       },
       function(cb) {
         $.post(Routing.generate('agregarPaisesDistribuidor'), $form.serialize(), 'json').done(function (data, textStatus, jqXHR) {
             cb(null,getValues(data.entities));
         }).fail(function () {
             cb("error");
         });
       }
    ],function(err,results) {
      var fullList = [].concat(results[0], results[1]);
      $('#td-' + data.idToUpdate).html(returnList(fullList));
      done();
    });
}

Solution 2:

your code could become

var paisesFromEntity;

  var deferred1 = $.post(Routing.generate('productoGuardarPasoCinco'), $form.serialize(), 'json');

  var returnList = function (entities) {
      if (entities.length > 0) {
          var items = [];
          entities.forEach(function (value, index, array) {
              items.push(value.pais);
          });

          return items.join(', ');
      }
  }, 
  fullList = [],
  getValues = function(arr){
      var ret = [];
      $.each(arr,function(i,entry) {
           ret.push(entry.pais);
      });
      return(ret);
  }; 

  var deferred2 = $.post(Routing.generate('agregarPaisesDistribuidor'), $form.serialize(), 'json');

  $.when(deferred1, deferred2)
  .then(function(resp1, resp2) {
    if (resp1[0].entities !== "undefined" || resp1[0].entities != "") {
      paisesFromEntity = resp1.entities.paises;

      fullList = fullList.concat(paisesFromEntity, getValues(resp2[0].entities));
      $('#td-' + data.idToUpdate).html(returnList(fullList));
    }
  });

Post a Comment for "How Do I Manage Timing Dependencies With Multiple Parallel $.post And Async Lib?"