1
私のAjax .then()
チェーンのコードに問題があります。予想通りに実行されません。Ajax complete()のin()チェーンが期待通りに実行されない
私のAjax機能は、スピナーをbeforeSend()
に表示し、それをに隠して進行中のインジケーターを表示します。私はこれらが、スピナーをいつ表示するかを決めるためにキャプチャできるエンドポイントだと思いました。
function outer() {
var promise = ajaxGetActivityId()
.then(function(data) {
outerFunction2();
});
デバッガが
- 私はAjaxのメソッドの
beforeSend
最初のショーに行くことを示しています。次のように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 }
この関数は、外側の関数により、
.then()
チェーンで呼び出されます スピナー、それは正しいです - 私はの前に
outerFunction2()
になる私のAjaxリクエストが完了しました!その時点で、スピナーはまだ表示されている です。私は、私が保証しないと思った私はouterFunction2()
に到達するまでAjaxの呼び出しが完了しました。 - その後、道をいくつかの点で、私はドキュメントからのAjax機能の
complete()
はい、それでした。驚くべきことですが、コード品質に悪影響を与えるコードはスパゲッティになり、Ajax関数でスピナーをコンパクトにカプセル化することはできません。ダウンストリーム操作の前に完了のためのプレースホルダーがなく、非常に直観的ではないことは恐ろしいことです。 –