jQuery Deferred 的 $.when() 和 failed() 回调参数

2024-02-11

使用时我得到了意想不到的结果$.when()当其中一项延迟操作未成功时。

以这个 JavaScript 为例,它创建了 2 个延迟。第一个成功,第二个失败。

var f1 = function() {
    return $.Deferred(function(dfd) {
        dfd.resolve('123 from f1');
    }).promise();
};

var f2 = function() {
    return $.Deferred(function(dfd) {
        dfd.reject('456 from f2');
    }).promise();
};

$.when(f1(), f2())
    .then(function(f1Val, f2Val) {
        alert('success! f1, f2: ' + JSON.stringify([f1Val, f2Val]));
    })
    .fail(function(f1Val, f2Val) {
        alert('fail!    f1, f2: ' + JSON.stringify([f1Val, f2Val]));
    });

自己运行一下:http://jsfiddle.net/r2d3j/2/ http://jsfiddle.net/r2d3j/2/

I get fail! f1, f2: ["456 from f2", null]

问题是在.fail()回调传递的值f2()拒绝,被路由到第一个参数,我期望f1Value。这意味着我真的没有办法知道哪个延迟对象实际发布了该内容reject(),而且我也不知道失败数据到底属于哪个操作。

我本以为.fail()会得到争论null, '456 from f2'因为第一次延迟没有失败。或者我只是在这里没有以正确的方式进行延期?

如果不遵守回调中的参数顺序,我如何知道哪些延迟失败,以及哪些拒绝参数属于哪个失败的延迟?


$.when()将执行失败的回调(传递给的第二个参数then()) 如果任何一个参数失败,则立即执行。这是设计使然。引用文档:

http://api.jquery.com/jQuery.when/ http://api.jquery.com/jQuery.when/

在多个 Deferred 的情况下,其中一个 Deferred 被拒绝,jQuery.when 立即为其主 Deferred 触发failCallbacks。请注意,此时某些延期问题可能仍未解决。如果您需要对这种情况执行额外的处理,例如取消任何未完成的ajax请求,您可以在闭包中保留对底层jqXHR对象的引用,并在failCallback中检查/取消它们。

实际上没有内置的方法来获取回调,直到所有这些都完成,无论它们的成功/失败状态如何。

所以,我建立了一个$.whenAll()为你 :)
它总是等到所有问题都以一种或另一种方式解决:

http://jsfiddle.net/InfinitiesLoop/yQsYK/51/ http://jsfiddle.net/InfinitiesLoop/yQsYK/51/

$.whenAll(a, b, c)
    .then( callbackUponAllResolvedOrRejected );
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

jQuery Deferred 的 $.when() 和 failed() 回调参数 的相关文章

随机推荐

  • 定义接受可变数量参数的宏生成的宏

    我正在尝试编写一个宏生成宏 其中它生成的宏采用可变数量的参数 我想知道是否有办法使以下代码工作 define syntax rule greet name define syntax rule name args printf hello
  • 如何在Python中定义保存1000位数字的小数类?

    我需要一个包含 1000 位十进制数字的类来计算一系列数据 例如 pi 数 花时间并不重要 我该如何定义 add 执行此操作的函数 例如我需要一个可以保存这个数字的值 3 1415926535897932384626433832795028
  • 客户端(android 应用程序)确认发送的 gcm 消息

    Android 应用程序可以通过 googleclougmessaging send 向 ccs 服务器获取发送的 gcm 消息的确认吗 客户端如何确定消息是否已传送到 ccs 服务器 根据云连接服务器文档 从设备向云发送消息时唯一的确认是
  • 传递类的私有方法作为 std::sort 的比较运算符

    我正在编写代码来解决以下问题 给定一组数字x 0 x 1 x N 1 找到使它们按升序排序的排列 换句话说 我想找到 0 2 N 1 上的排列 例如i 0 i 1 i N 1 这样x i 0 lt x i 1 lt lt x i N 1 为
  • 带标点符号的实时语音识别

    使用自动标点符号实现语音识别 语音到文本 的方法是什么 我想用它来将讲座 45 分钟的演讲 转换为文本 并在可能的情况下动态更新视图 我尝试了 SpeechRecognizer 但它只给我没有标点符号的单词 并且在第一个单词后停止收听 您可
  • 隐藏仅在 Windows 上显示的无用滚动条

    我的导航栏中有一个引导下拉列表 显示通知列表 这是非常标准的代码 除了我设置的max height 300px and overflow y scroll on the ul元素 在 Mac 上的 Chrome 或 Firefox 中查看时
  • Django 多对多 (m2m) 与同一模型的关系

    我想在用户类对象之间创建多对多关系 我有这样的事情 class MyUser models Model blocked users models ManyToManyField MyUser blank True null True 问题是
  • 为什么 mysql 和 sqlite 的 SELECT 结果不同?

    我再问这个question https stackoverflow com questions 10161153 sqlite exists keyword how to query the highest average以简化和扩展的方式
  • 如何更改 Android 中 Exoplayer 中的音轨

    我有一些带有两个音轨的视频 我想在视频播放期间将音轨更改为另一种语言 我已经尝试了一切但仍然没有成功 这是我的代码 我正在使用 firebase 存储来存储视频 我到处搜索但找不到解决方案 我的代码正在运行 仍然没有出现任何错误 但我不可能
  • 如何检查是否设置了闹钟

    我正在尝试检查我的闹钟是否处于活动状态 在设置闹钟之前 alarmIsSet 方法将返回 false 设置闹钟时返回 true 到目前为止一切顺利 但是 在我取消闹钟后 alarmIsSet 将继续返回 true 直到我重新启动设备 我该如
  • 检查字符串是否采用特定日期格式

    您好 我收到一个带有日期格式的字符串年 月 日 但我想将它与格式进行比较日 月 年万一它不一样 肯定不一样 我想转换它 对我来说问题不是转换 而是比较两种格式 所以我想也许是这样的 var dt obj date this a string
  • 类型错误:无法使用此索引类型执行 __truediv__:DatetimeArray

    我有一个包含收盘价的数据框 Date World EN UT IND MAT CS CD IT FN TC HC 0 1997 06 13 939 3672 96 0238 75 2840 105 2635 124 7077 80 4562
  • 使用 Google 应用程序脚本将 xlsx 文件从 gdrive 导入到电子表格

    我目前正在创建一个脚本 可以将从 gdrive 文件夹存储的 xlsx 文件导入到电子表格中 我是否可以知道是否有人有我可以探索的参考或示例我已经做了一些研究 但其中一些正在 CSV 过程中 Firstly 这不是一些赠品服务 如果没有代码
  • 没有缓存版本的 gradle

    我在同步 gradle 时收到此错误 我对 gradle 还很陌生 所以不知道到底是什么问题 错误 没有 com android tools build 的缓存版本 gradle 0 10 1 可用于离线模式 当我去Setting gt G
  • 以编程方式将 SVG 形状转换为路径(lineto、moveto)

    我有一个来自 Inkscape Illustrator 或任何其他应用程序的 SVG 文件 我想将形状转换为lineto moveto curveto format 我想要的是这样的 Appname svgfile outfilewithp
  • Spring boot 中 /* 和 /** 模式有什么区别?

    当我发现过滤器之间存在差异时 我试图为过滤器注册某些 URL and 模式 Bean public FilterRegistrationBean tokenAuthenticationFilterBean FilterRegistratio
  • SQL查询获取另一个表中多行的行数

    在我的应用程序中 我有一组可以在列出资源时应用的过滤器 这些过滤器通过在执行查询之前添加 WHERE 子句等来构建查询 这是使用 SQL Server 2008 我有两个相关的表 一个包含有关资源的一些静态数据 另一个可以包含与该资源相关的
  • if 语句中的结构体初始化

    我想检查结构是否为空 即它的所有字段是否都设置为其默认值 以下内容按预期工作 package main import fmt type MyStruct struct field1 string field2 int func main v
  • R coxph() 警告:Loglik 在变量之前收敛

    我在使用 coxph 时遇到一些问题 我有两个分类变量 性别和可能的原因 我想将其用作预测变量 性别只是典型的男性 女性 但可能的原因有 5 个选项 我不知道警告消息有什么问题 为什么置信区间从 0 到 Inf 并且 p 值如此高 这是代码
  • jQuery Deferred 的 $.when() 和 failed() 回调参数

    使用时我得到了意想不到的结果 when 当其中一项延迟操作未成功时 以这个 JavaScript 为例 它创建了 2 个延迟 第一个成功 第二个失败 var f1 function return Deferred function dfd