Рекурсивная группировка звонков у меня работает.Но так как я получаю 4 КБ объектов XHR2 и сохраняю каждый в IndexedDB (PouchDB).У меня есть темы как для XHR2, так и для IDB.Поэтому я должен был быть немного более изощренным:
for (var i in info.LayerInfo) {
var imageType = (info.LayerInfo[i].Class == "BASE") ? "jpg" : "png";
info.LayerInfo[i].SaveCount = 0;
getLayer(0, info, info.LayerInfo[i], info.LayerInfo[i].Path, imageType);
}
}
function getLayer(index, info, layer, base, imageType) {
if (layer.Files.length == 0) {
console.log("Thread done: " + index + " SaveCount: " + layer.SaveCount);
return;
}
var val = layer.Files.shift();
var path = base + "/" + val.id + "." + imageType;
$xhr.ajax({
url: path,
dataType: "blob",
success: function (data) {
console.log("fetched: ", layer.Type + "-" + val.id);
saveBlob(data, val.size, val.id, layer.Type, index, info, layer, base, imageType);
if (index < maxThreads - 1) {
getLayer(++index, info, layer, base, imageType);
} else {
return;
}
}
});
}
function saveBlob(blob, length, id, layerID, index, info, layer, base, imageType) {
if (blob.size != length) {
console.error("Blob Length found: ", blob.size, " expected: ", length);
}
var blobID = layerID + "-" + id;
var type = blob.type;
DB.putAttachment(blobID + "/pic", blob, type, function (err, response) {
if (err) {
console.error("Could store blob: error: " + err.error + " reason: " + err.reason + " status: " + err.status);
} else {
console.log("saved: ", response.id + " rev: " + response.rev);
layer.SaveCount++;
getLayer(index, info, layer, base, imageType);
}
});
}