Ich muss einen rekursiven Prozess ausführen und die Versprechungen funktionieren nicht so, wie ich will. Dies ist der Code:Versprechen nicht gelöst in einer .each() - Schleife
var openAllLeves = function() {
openAll = 1;
$.when(openLevels()).then(openAll = 0);
}
var openLevels = function() {
var promises = [];
$('.myClass:not([data-type="T"])').each(function() {
var defer = $.Deferred();
$.when(loadLine($(this)).then(promises.push(defer)));
});
return $.when.apply(undefined, promises).promise();
}
var loadLine = function (thisObj) {
var defer = $.Deferred();
switch(nivel) {
case 1:
$.when(getPT($(thisObj).attr('data-a'))).then(defer.resolve());
break;
case 2:
// ...
}
return defer.promise();
}
var getPT = function (psn) {
var defer = $.Deferred();
var payload = { /* parameters... */ };
$.ajax({
url: webmethod,
data: payload,
type: "POST",
contentType: "application/json; charset=utf-8",
dataType: "json",
timeout: 10000,
success: function (data) {
$.when(paintPT(data)).then(function() {
if (openAll)
openLevels(), defer.resolve();
});
}
});
return defer.promise();
}
Mein Problem ist, dass openAll der Wertänderungen 0 vor, so in dem Ajax-Funktion Erfolgscode ausgewertet wird nur eine Iteration durchgeführt wird und die Rekursivität nicht getan. Es sieht so aus, als ob es ausgeführt wird, bevor das Array der Versprechen aufgelöst wird.
Der Code ist ein wenig verwirrend, so dass jede Hilfe geschätzt wird. Vielen Dank im Voraus.
können Sie erklären, was dieser Code versucht zu tun? – madalinivascu
Nur versuchen, einen AJAX-Aufruf für jede Zeile in einer Tabelle auszuführen. Diese Aufrufe geben andere Zeilen zurück und generieren neue Aufrufe, bis die zurückgegebene Zeile das Attribut 'data-type = "T"' hat.Danke für Ihr Interesse. – MKP
Können Sie die Tabelle nicht in der serverseitigen Sprache erstellen? Wenn Sie können warum tun Sie es nicht? – madalinivascu