我有一个充当客户端 API Client 的对象,它公开了几个函数,这些函数都返回 jQuery ajax() 对象。其中一些 ajax 调用具有直接链接到它们的 .done()
和 .fail()
调用,因为它们是每次 API 响应返回时需要执行的操作在允许其余 js 代码处理响应之前。非常标准的东西。
我需要启动数量可变的 API 请求,等待所有请求失败或成功,然后继续处理。对于我将创建的示例,我会将其简化为仅两个 ajax 调用。
所以我创建一个数组来保存返回的 ajax 对象,然后使用 $.when().apply(null, deferreds).then(function(){//在两个 ajax 请求完成后做一些事情} )
。当调用成功完成时,一切正常。当调用失败时(例如 ajax 调用 404s),情况就不太好了。
问题是 .then()
似乎没有检测到失败,even though I thought then()
was supposed to be fired regardless of success or failure of the underlying promise(s) .
我可以切换到 .always()
,它似乎工作得更好(因为它检测到故障并仍然触发回调)但它似乎在某些 之前触发。 fail()
直接在 ajax 调用上注册的回调,这对我来说没有意义,因为我认为 ajax 调用的回调是按照它们注册的顺序调用的。
我确定我只是遗漏了一些关于 ajax()
when()
then()
组合的行为。
Fiddle 显示使用 .then()
成功调用:https://jsfiddle.net/kwrLyw6q/5/
Fiddle 使用 .then()
失败的 ajax 调用(不工作,很想知道为什么。似乎这是“正确”的方法,但我想不通我哪里出错了):https://jsfiddle.net/kwrLyw6q/2/
Fiddle 使用 .always()
(有效,但注意乱序的回调顺序。至少,与我想要的顺序相比乱序了!):https://jsfiddle.net/kwrLyw6q/7/
最佳答案
关于javascript - jQuery .when().then() 没有按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43107175/