jQuery.Deferred().then,多参数如何解析

2023-12-28

所以我的 API 期望当特定的延迟得到解决时,它会获得 2 个参数。

fn().done(function(arg1, arg2) {
  console.log(arg1, arg2);
}).fail(function(err) {
  console.error(err);
});

现在涉及到fn上面的函数,在解析之前需要先等待其他延迟返回。

function other() {
  // stubbed out to always resolve
  return $.Deferred().resolve().promise();
}

function fn() {
  return other().then(function() {
    return [1, 2];
  });
}

但这是行不通的,因为arg1将作为[1, 2] and arg2undefined。我不知道如何从Deferred.then()第一个成功过滤函数参数,以便生成的管道延迟解析具有多个参数。

我当然可以这样做:

function fn() {
  var done = $.Deferred();
  other().done(function(){
    done.resolve(1, 2);
  }).fail(function(){
    done.reject.apply(done, arguments);
  });
  return done.promise();
}

但这并不像使用那么优雅.then()现在我每次都需要担心负面失败案例 API,即使我知道我只是通过管道传输拒绝状态。

是的,我也可以改变fn()api 来解析数组,但我真的希望有一个优雅的解决方案。


你必须调用resolve() or reject()为了传递多个参数。

.then()不包括任何机制“传播“返回的集合。它只会保持集合完整作为第一个参数。

但是,它将与Deferred或承诺返回。来自以“开头的段落从 jQuery 1.8 开始" http://api.jquery.com/deferred.then/:

这些过滤器函数可以返回一个新值,并传递给 Promise 的 .done() 或 .fail() 回调,或者他们可以返回另一个可观察对象(Deferred、Promise 等),该对象会将其已解决/拒绝状态和值传递给 Promise 的回调.

所以,你可以使用你的例子other()作为基础fn()使其与另一个保持相当简洁Deferred():

function fn() {
    return other().then(function () {
        return $.Deferred().resolve(1, 2).promise();
    });
}

fn().then(function (a, b) {
    console.log(arguments.length, a, b); // 2 1 2
});

http://jsfiddle.net/cqac2/ http://jsfiddle.net/cqac2/

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

jQuery.Deferred().then,多参数如何解析 的相关文章

  • 使用相同图像映射的多个图像 - 如何在单击时返回正确的图像参考?

    我在一个页面上有多个图像 所有图像都使用相同的图像映射 我需要知道用户点击了哪个图像 问题是 this 返回对的引用 area 而不是 img 这是代码 img src image png img src image png img src
  • 使用 jQuery 选择焦点文本在 Safari 和 Chrome 中不起作用

    我有以下 jQuery 代码 类似于这个问题 https stackoverflow com questions 480735 在 Firefox 和 IE 中工作 但在 Chrome 和 Safari 中失败 没有错误 只是不起作用 有解
  • $.each() 内的 setTimeout

    好的 所以我有这个代码 this find article loading each function i var el this setTimeout function el replaceWith dumpster article fi
  • JSON字符串转JS对象

    我正在使用 JS 对象通过 Google 可视化创建图表 我正在尝试设计数据源 首先 我在客户端创建了一个 JS 对象 var JSONObject cols id date label Date type date id soldpenc
  • 在移动浏览器或 PhoneGap 应用程序之间进行检测

    是否可以使用 JavaScript 检测用户是否通过浏览器或应用程序进行访问 我正在通过网页和 PhoneGap 应用程序开发适用于多个移动操作系统的混合应用程序 目标是 独立于部署目标使用相同的代码 仅当用户代理是应用程序时添加 Phon
  • jQuery 单击位于另一个 div 之上的 div

    我的 jQuery 有问题click当选择器是 a 时div那是在另一个之上div正如这里所看到的 the html div div div div css parent background color red width 100px h
  • jquery 验证最小长度规则不起作用

    我有一个带有密码字段的表单 密码长度必须至少为 8 个字符
  • IE8 上 json 解析失败

    json gt 返回的响应 msg div p Unfortunately we were unable to process your application p br Please upload a CV br div status e
  • 掩码输入数字 - 百分比

    如何通过 jQuery 创建具有百分比的数字掩码输入 我是否让输入仅接受三个数字 并在用户完成输入时在数字后添加百分号 keyup 我不使用插件 例子 1 Or 30 Or 99 Or 100 Or 200
  • 使用 Javascript 删除字符串的最后一个字符

    我有一个DIV与一些字符 如何在每次单击时删除文本中的最后一个字符DIV itself 删除第一个字符 div on click function this text function index text return text repl
  • Ajax 刷新后的事件监听器

    我的网站上有一个结帐部分 我在数量部分运行此事件侦听器 以便每次根据单击的产品更新数量时 整个 div 都会使用 AJAX 重新加载 因此所有价格 总金额也会刷新 该代码可以工作一次 但之后该功能就不再工作了 cart product qu
  • Meteor 渲染回调并应用 jQuery 插件

    在将 jQuery 插件 如滑块或同位素 应用到从 Meteor 加载动态内容的 DOM 元素集合时寻找一种模式 如果您致电template rendered doc here http docs meteor com template r
  • 如何使tinyMCE编辑器在首次初始化后保留在我的jQgrid textarea formit表单中?

    我有一个 jqgrid 我试图在文本区域中使用tinyMCE 在我的数据库中发送 存储 html 并重新加载到我的网格中 我有一个带有tinyMCE的自定义列作为文本区域 但是在我打开editform一次并在下次打开时关闭它之后 tinym
  • 两个单独表格上的 Td 高度

    我有两个单独的表 我在每个 tr 上使用焦点 悬停函数 该函数同时在两个表上都很好用 我的问题是 td 高度 因为如果第一个表中 td 的描述更大 将显示在中的两行上相同的td和td的高度将被修改 但仅限于第一个表td 如何记住第一个表中
  • 使用 javascript 根据索引合并多个数组

    我需要将两个数组合并为一个数组 我有代码 但它没有按预期工作 它将它们一个接一个地合并 但我需要互锁这些值 div div
  • 解决错误 413 请求实体太大

    我正在从事的项目允许我们的员工将大文件上传到我们的共享主机并获取下载链接 问题是我们的托管拒绝更改共享托管的 LimitRequestBody 还有其他解决方案可以解决 LimitRequestBody 或任何其他方法来完成这项工作吗 有两
  • jQuery 将表单提交到新选项卡?

    我有一个表单中的操作链接 需要每分钟用令牌更新一次 当用户单击提交按钮时 我从 api 调用中获取新的 url 令牌 我正在使用这样的东西
  • 我可以在 .split() 之后直接访问数组的第二个值吗?

    我有这个代码 var tmp this attr id split 我想将分割后的第二个值存储在 tmp 上 因此 如果 this attr id hello marco 我想在 tmp 中存储值 marco 而不是数组 当然 我想直接用一
  • 带有 ASP.NET 按钮回发的 jQuery UI 对话框

    我的 ASP NET 页面上有一个运行良好的 jQuery UI 对话框 jQuery function jQuery dialog dialog draggable true resizable true show Transfer hi
  • 获取列表框中选定值的列表

    已经有一个问题得到了大量的投票 要求使用 jQuery 从下拉列表中获取选定的值here https stackoverflow com questions 1643227 get selected text from drop down

随机推荐