我的Ajax complete()
链中的.then()
代码出现问题 - 它在预期时无法执行。
我的Ajax函数在beforeSend()
上显示一个微调器,并将其隐藏在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();
});
调试器显示
beforeSend
然后显示
Spinner,这是正确的outerFunction2()
我的Ajax请求已经完成!那时微调器还在
显示,它不应该。我以为我保证不会
到达outerFunction2()
,直到Ajax调用完成。complete()
答案 0 :(得分:1)
来自文档......
<强>完整强>
请求完成时要调用的函数(执行成功和错误回调之后)。
我想这还包括在之后执行 then
/ done
之类的任何其他承诺处理程序。
我会一个接一个地链接承诺决议。例如,删除complete
并尝试
function ajaxGetActivityId() {
return $.ajax({ ... })
.then(data => {
hideLoading()
return data
})
}
这将保证在任何其他promise解析处理程序执行之前进行hideLoading()
调用。