如何管理多个并行$。员额和异步LIB时序依赖呢? [英] How do I manage timing dependencies with multiple parallel $.post and async 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屋!