javascript - JQuery中的多个承诺解决
问题描述
我有这个多重承诺请求需要在继续下一组请求之前解决。
如果 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();
}
解决方案
function print_batch(printItemList){
//create recursive method
function print_next_label(index) {
//if we have not reached the end of the list, do more work
if (index < printItemList.length) {
//call the method, wait for all the promises to finish
$.when.apply($, print_label(printItemList[index])).done(function(){
//now that they are done, try to print the next label
print_next_label(++index);
});
}
}
//start the recursive method loop with index 0
print_next_label(0);
}
推荐阅读
- html - 如何使用 Firebase 数据填充 HTML 页面?
- java - 查找 arraylist 元素时的语法
- python - 为什么会发生此错误?TypeError:只能将str(不是“int”)连接到str
- asp.net-core - Blazor - WebAssemby ASP.NET Core 托管模型
- python - 当 url 是 localhost vhost 时,为什么使用 Python3 urllib.request.Request 会导致“对等方重置连接”?
- r - R - 在用户函数中获取与正则表达式模式匹配的表列表
- json - 如何使用 pandasmdx 从澳大利亚统计局获取数据
- python - 无法在 Jupyter Notebook 中导入模块:两个不同的目录
- javascript - 当用户向下滚动时,如何使第一个视图中的向下箭头消失?
- angular - Angular 无法在 HTML 中打印 JSON 数据?