Javascript 如何在序列中使用承诺
我是编程新手。我需要帮助将我的代码转换成连续的承诺。它有一些复选框,用于获取选中的值,然后运行下面显示的代码。谢谢你的帮助Javascript 如何在序列中使用承诺,javascript,Javascript,我是编程新手。我需要帮助将我的代码转换成连续的承诺。它有一些复选框,用于获取选中的值,然后运行下面显示的代码。谢谢你的帮助 var promises = []; for (var i in checkValues) { //var request = AjaxAsync(checkValues[i]); //promises.push(request); var request = $.ajax({ url: '/inventory/supplier_re
var promises = [];
for (var i in checkValues) {
//var request = AjaxAsync(checkValues[i]);
//promises.push(request);
var request = $.ajax({
url: '/inventory/supplier_replacement/details/DownloadSupRet',
method:'post',
data: {
hrd_id : '{{.Tconf.hdr_id}}' ,
checkbox_id : checkValues[i] ,
qty : $('#'+checkValues[i]).val() ,
},
success: function (data) {
console.log(data[0]);
var htdata = '<div class="alert alert-danger"> Error: </div>';
if(parseInt(data[0])>0){
htdata = '<div class="alert alert-success"> Success: ID # '+data[0]+' </div>';
}else{
htdata = '<div class="alert alert-danger">'+data[1]+'</div>';
errorcount +=1
}
$( ".errorDv" ).append(htdata)
}
})
promises.push(request);
}
var承诺=[];
用于(检查值中的var i){
//var请求=AjaxAsync(检查值[i]);
//承诺。推送(请求);
var请求=$.ajax({
url:“/inventory/supplier_replacement/details/downloadsuport”,
方法:'post',
数据:{
hrd_id:“{{.Tconf.hdr_id}}”,
checkbox\u id:checkValues[i],
数量:$(“#”+校验值[i]).val(),
},
成功:功能(数据){
console.log(数据[0]);
var htdata='错误:';
if(parseInt(数据[0])>0){
htdata='Success:ID#'+数据[0]+';
}否则{
htdata=''+数据[1]+'';
errorcount+=1
}
$(“.errorDv”).append(htdata)
}
})
承诺。推送(请求);
}
如果您想一个接一个地提出请求,您可以将您的checkvalue减少为一个承诺:
var promises = [];
checkValues.reduce(
function(p,checkValue){
p.then(
function(results){
$.ajax({
url: '/inventory/supplier_replacement/details/DownloadSupRet',
method: 'post',
data: {
hrd_id: '{{.Tconf.hdr_id}}',
checkbox_id: checkValue,
qty: $('#' + checkValue).val(),
}
})
.then(
function (data) {
return results.concat([data]);
}
)
.catch(
function(err){
//an error with the connection or server error
return results.concat([err])
}
)
.then(
)
}
)
},
$.Deferred().resolve([])//assuming no native promises or polyfil
)
.then(//all results came in
function(results){
results.forEach(
function(result){
console.log(result[0]);
var htdata = '<div class="alert alert-danger"> Error: </div>';
if (parseInt(result[0]) > 0) {
htdata = '<div class="alert alert-success"> Success: ID # ' + result[0] + ' </div>';
} else {
htdata = '<div class="alert alert-danger">' + result[1] + '</div>';
errorcount += 1
}
$(".errorDv").append(htdata);
}
);
}
);
谢谢你,我会试试这个。
var promises = [];
$.when.apply(//when takes arg1,arg2... but with apply we can pass args as array
$,
checkValues.map(
function(checkValue){
$.ajax({
url: '/inventory/supplier_replacement/details/DownloadSupRet',
method: 'post',
data: {
hrd_id: '{{.Tconf.hdr_id}}',
checkbox_id: checkValue,
qty: $('#' + checkValue).val(),
}
})
.catch(
function(err){
//an error with the connection or server error
return err
}
)
}
)
)
.then(//all results came in
function(results){
results.forEach(
function(result){
console.log(result[0]);
var htdata = '<div class="alert alert-danger"> Error: </div>';
if (parseInt(result[0]) > 0) {
htdata = '<div class="alert alert-success"> Success: ID # ' + result[0] + ' </div>';
} else {
htdata = '<div class="alert alert-danger">' + result[1] + '</div>';
errorcount += 1
}
$(".errorDv").append(htdata);
}
);
}
);