javascript - jQuery .when().then() 没有按预期工作

标签 javascript jquery ajax

我有一个充当客户端 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/

最佳答案

看起来像deferred.then()接受三个参数:

  • 成功函数(第一个参数)。
  • 函数失败(第二个参数)。
  • 进度函数(第三)

updated fiddle

关于javascript - jQuery .when().then() 没有按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43107175/

相关文章:

php - 如何刷新和删除当前 URL 上的某些查询

javascript - Form_for 不适用于 JS/JQuery

javascript - 在 for 循环内发出 GET 请求

javascript - 可以进行客户端 HTTP 推送吗?

javascript - 如何使用 Vue 正确检查所有复选框并更改状态?

javascript - 使用 JavaScript 修改 BIRT 中的查询输出

javascript - 无法从 CakePHP 3 中的 AJAX 请求获取数据

jquery - 如何防止在 twitter bootstrap typeahead 插件中按 Enter 键提交

javascript - 如何在客户端更改 Javascript src 文件?

javascript - 如何使用 jQuery DataTables 从所有页面提交复选框