У меня есть этот запрос многократного обещания, который должен быть разрешен перед продолжением следующего набора запросов.
Если длина printItemList равна 1, он работает нормально.Но проблема начинает происходить, когда ее больше 2.
Идея состоит в том, чтобы запустить print_label после успешного разрешения предыдущего print_label.Прямо сейчас его запускают немедленно и не дожидаются завершения предыдущего запроса.
Есть ли что-то, что я делаю здесь неправильно?
Любая помощь по этому вопросу будет принята с благодарностью.
function print_batch(printItemList){
var chain = $.when();
var arr = [];
for(var batch_size = 0; batch_size < printItemList.length; batch_size ++){
(function(i){
chain = chain.then(function() {
$.when.apply($, arr).done(function(){
arr = print_label(printItemList[i]);
});
});
})(batch_size);
}
}
function print_label(selectedRow) {
var d = $.Deferred();
var chain = $.when();
var arr = [];
var request = buildLabel(selectedRow);
var noOfLabel = parseInt(selectedRow.labelCount);
var url = 'API_URL';
var epos = new epson.ePOSPrint(url);
for (var count = 0; count < noOfLabel; count++) {
(function(i){
chain = chain.then(function() {
var def = sendRequest(selectedRow, epos, request);
arr.push(def);
return def;
});
})(count);
}
return arr;
}
function sendRequest(selectedRow, epos, request){
var deferred = $.Deferred();
epos.send(request);
epos.onreceive = function(res) {
return deferred.resolve(res);
}
epos.onerror = function(err) {
return deferred.reject();
}
return deferred.promise();
}