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