如何管理多个并行$。员额和异步LIB时序依赖呢? [英] How do I manage timing dependencies with multiple parallel $.post and async lib?

查看:128
本文介绍了如何管理多个并行$。员额和异步LIB时序依赖呢?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有这个jQuery code其中第二个 $。员额()依赖于第一个 $。员额()执行,这可能是一个问题,如果第一个还没有完成,或在之前执行或第二个启动失败。也许我可以使用某种的解决方法,链式调用的,但我认为不是pretty可言。我如何使用获得这搭exammple Coalan异步

  VAR paisesFromEntity;  $。员额(Routing.generate('productoGuardarPasoCinco'),$ form.serialize(),'JSON')。完成(功能(数据,textStatus,jqXHR){
    如果(data.entities!==未定义|| data.entities!=){
      paisesFromEntity = data.entities.paises;
    }
  })失败(函数(){
      返回false;
  });  VAR returnList =功能(实体){
      如果(entities.length大于0){
          变种项= [];
          entities.forEach(功能(价值指数,数组){
              items.push(value.pais);
          });          返回items.join(,);
      }
  },
  fullList = [],
  的GetValues​​ =功能(ARR){
      VAR RET = [];
      $。每个(ARR,功能(我,进入){
           ret.push(entry.pais);
      });
      返回(RET);
  };  $。员额(Routing.generate('agregarPaisesDistribuidor'),$ form.serialize(),'JSON')。完成(功能(数据,textStatus,jqXHR){
      fullList = fullList.concat(paisesFromEntity,的GetValues​​(data.entities));
      $('#TD-'+ data.idToUpdate)的.html(returnList(fullList));
  })失败(函数(){
      返回false;
  });


解决方案

按照要求,异步lib只是神话般 - 节点服务器端或在浏览器中。这里是LIB https://github.com/caolan/async

既然你是并行做这些,你想做的事:

 函数doLotsOfStuff(完成){
    async.parallel([
       功能(CB){
         $。员额(Routing.generate('productoGuardarPasoCinco'),$ form.serialize(),'JSON')。完成(功能(数据,textStatus,jqXHR){
           如果(data.entities!==未定义|| data.entities!=){
             CB(NULL,data.entities.paises);
           }其他{
             CB();
           }
         })失败(函数(){
           CB(错误);
         });
       },
       功能(CB){
         $。员额(Routing.generate('agregarPaisesDistribuidor'),$ form.serialize(),'JSON')。完成(功能(数据,textStatus,jqXHR){
             CB(NULL,的GetValues​​(data.entities));
         })失败(函数(){
             CB(错误);
         });
       }
    ],功能(错了,结果){
      VAR fullList = [] .concat(结果[0],结果[1]);
      $('#TD-'+ data.idToUpdate)的.html(returnList(fullList));
      完成();
    });
}

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 before. Maybe I could use some kind of chained calls for a workaround but I think is not pretty at all. How do I get ride of this using for exammple Coalan Async?

  var paisesFromEntity;

  $.post(Routing.generate('productoGuardarPasoCinco'), $form.serialize(), 'json').done(function (data, textStatus, jqXHR) {
    if (data.entities !== "undefined" || data.entities != "") {
      paisesFromEntity = data.entities.paises;
    }
  }).fail(function () {
      return false;
  });

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

  $.post(Routing.generate('agregarPaisesDistribuidor'), $form.serialize(), 'json').done(function (data, textStatus, jqXHR) {
      fullList = fullList.concat(paisesFromEntity, getValues(data.entities));
      $('#td-' + data.idToUpdate).html(returnList(fullList));
  }).fail(function () {
      return false;
  });

解决方案

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

这篇关于如何管理多个并行$。员额和异步LIB时序依赖呢?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆