Ich habe ein Problem mit dem complete()
Code in meiner Ajax Kette - es wird nicht ausgeführt, wenn erwartet.Ajax complete() in then() Kette wird nicht ausgeführt, wenn erwartet
Meine Ajax-Funktion zeigt einen Spinner unter beforeSend()
an und blendet ihn unter complete()
aus, um den laufenden Indikator anzuzeigen. Ich dachte, dies wären die Endpunkte, die ich erfassen könnte, um zu entscheiden, wann ich den Spinner zeigen soll.
function ajaxGetActivityId() {
var promise = $.ajax({
type : "post",
dataType : "json",
url : '/myapp/activityId',
data : '',
beforeSend: function(){
showLoading();
},
complete: function(){
hideLoading();
}
});
return promise; // Return a promise from this function
}
Diese Funktion wird in der .then()
Kette wie folgt aufgerufen, durch eine äußere Funktion:
function outer() {
var promise = ajaxGetActivityId()
.then(function(data) {
outerFunction2();
});
Der Debugger zeigt, dass
- I
beforeSend
erste und zeigen auf die Ajax-Methode des bekommen die Spinner, das ist richtig - Dann komme ich zu
outerFunction2()
vor meine Ajax-Anfrage ist abgeschlossen! An diesem Punkt ist der Spinner immer noch gezeigt, und es sollte nicht sein. Ich dachte, ich wäre garantiert nicht bisouterFunction2()
bis der Ajax-Aufruf abgeschlossen. - Dann irgendwann auf der Straße, erreiche ich die
complete()
Ja das war es. Erstaunlich - aber auch schlecht für die Code-Qualität, der Code wird zu Spaghetti und jetzt kann ich den Spinner nicht kompakter in den Ajax-Funktionen einkapseln. Es ist schrecklich, dass es vor() Downstream-Operationen keinen Platzhalter für die Vervollständigung gibt, sehr inkontuitiv. –