Javascript 如何使用多个并行$.post和异步库管理时序依赖关系?

Javascript 如何使用多个并行$.post和异步库管理时序依赖关系?,javascript,jquery,asynchronous,Javascript,Jquery,Asynchronous,我有一个jQuery代码,其中第二个$.post()依赖于第一个$.post()执行,如果第一个还没有完成,或者在执行过程中失败,或者之前的第二个启动失败,这可能是一个问题。也许我可以使用一些链式调用来解决问题,但我认为这一点都不好。例如,我如何使用这个 根据要求,异步库非常棒——在节点服务器端或浏览器中。这是图书馆 由于您正在并行执行这些操作,因此您希望执行以下操作: function doLotsOfStuff(done) { async.parallel([ func

我有一个jQuery代码,其中第二个
$.post()
依赖于第一个
$.post()
执行,如果第一个还没有完成,或者在执行过程中失败,或者之前的第二个启动失败,这可能是一个问题。也许我可以使用一些链式调用来解决问题,但我认为这一点都不好。例如,我如何使用这个


根据要求,异步库非常棒——在节点服务器端或浏览器中。这是图书馆

由于您正在并行执行这些操作,因此您希望执行以下操作:

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();
    });
}
你的代码可能会变成

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));
    }
  });

你已经回答了你自己的问题。如果您希望使用,请阅读其文档。不要在网上发帖,这样可以让别人来实现你的功能。@hon2a这是另一个问题的分支。我建议修改答案会分散他的注意力,所以请他把它打断。这并不能改变这样一个事实,即OP应该在把问题放到这里之前自己做研究。@hon2a,是的,我知道,但这是一个分支,我试图提供帮助。:-)
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));
    }
  });