then()链中的Ajax complete()在预期时不会执行

问题描述 投票:1回答:1

我的Ajax complete()链中的.then()代码存在问题 - 它在预期时不会执行。

我的Ajax函数在beforeSend()上显示一个Spinner并将其隐藏在complete()上以显示正在进行的指示器。我认为这些是我可以捕捉的终点,以决定何时展示微调器。

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()链中通过外部函数调用如下:

function outer() {

var promise = ajaxGetActivityId() 
            .then(function(data) {
                outerFunction2();
             });

调试器显示了这一点

  1. 我首先使用Ajax方法qazxsw poi并显示Spinner,这是正确的
  2. 然后我在Ajax请求完成之前到达beforeSend!在那时,旋转器仍然显示,它不应该。我以为我保证在Ajax通话完成之前我不会去outerFunction2()
  3. 然后,在某个时刻,我会到达Ajax函数的outerFunction2()
jquery ajax
1个回答
1
投票

从文档......

完成 请求完成时要调用的函数(执行成功和错误回调之后)。

我想这还包括执行任何其他承诺处理程序,如complete() / then

我会一个接一个地链接承诺决议。例如,删除done并尝试

complete

这将保证在任何其他promise解析处理程序执行之前进行function ajaxGetActivityId() { return $.ajax({ ... }) .then(data => { hideLoading() return data }) } 调用。