gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 23:49:46 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com