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