使用 Q 打破动态的 Promise 序列

2024-01-03

我有几个承诺(P1,P2,... Pn)我想将它们按顺序链接起来(所以 Q.all 不是一个选项)并且我想在第一个错误时打破链条。
每个承诺都有其自己的参数。
我想拦截每个承诺错误以转储错误。

如果 P1、P2、.. PN 是我的承诺,我不知道如何自动化该序列。


如果你有一连串的承诺,它们都已经开始了,你无法启动或停止它们中的任何一个(你可以取消,但仅此而已)。

假设你有F1,... Fn 承诺返回函数,您可以使用承诺的基本构建块,我们的.then为了这:

var promises = /* where you get them, assuming array */;
// reduce the promise function into a single chain
var result = promises.reduce(function(accum, cur){
    return accum.then(cur); // pass the next function as the `.then` handler,
                     // it will accept as its parameter the last one's return value
}, Q()); // use an empty resolved promise for an initial value

result.then(function(res){
    // all of the promises fulfilled, res contains the aggregated return value
}).catch(function(err){
    // one of the promises failed, 
    //this will be called with err being the _first_ error like you requested
});

因此,注释较少的版本:

var res = promises.reduce(function(accum,cur){ return accum.then(cur); },Q());

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

使用 Q 打破动态的 Promise 序列 的相关文章

随机推荐

  • 如何使用反射调用自定义运算符

    在我的小项目中我使用System Reflection类来生成可执行代码 我需要打电话给 自定义类型的运算符 有谁知道如何使用 C 反射调用自定义类的自定义运算符 C 编译器将重载运算符转换为具有名称的函数op XXXX where XXX
  • 如何处理 .ajax post 中的 FileStream 返回类型?

    我通过以下代码发送 JSON 对象 控制器返回 CSV 格式的值 应提示打开或保存为 CSV 文件 我无法理解成功应该编写什么代码 函数 结果 导出链接 Html ActionLink Export null new onclick ret
  • 如何让 Java 应用程序与网站交互

    我有一个程序 可以从 Excel 文件中获取数据并为用户进行操作 但为了获取 Excel 文件的更新 需要从网站下载它们 我最初尝试使用机器人类导航到网站 使用用户名和密码登录 然后导航到网站的正确部分 找到 下载 Excel 电子表格 按
  • “所选目录不是 JDK 的有效主目录”Android Studio

    我一直在使用安卓工作室直到我更新到0 2 6 现在 我无法编译或创建新项目 会发生什么 我不确定 但我认为安卓工作室不知道我的 sdk 文件夹在哪里 我的意思是我的 android studio 目录中的 sdk 文件夹 我做了什么 我已经
  • Matplotlib vline 标签参数未显示

    我想用 matplotlib 的 vline 命令标记垂直线 但由于某种原因 label 参数在最终绘图上不执行任何操作 显示任何内容 有谁知道如何让标签显示出来 plt vlines x pah ymin 0 ymax 0 6 color
  • graphviz - 比较图形树

    我必须用 graphviz 来做一份工作 我需要可视化几棵树的图形表示 但无论如何我都必须比较两棵树以查看它们的差异 像这样 我有树 A 和树 B 创建它们的表示并比较它们后 我只需要查看没有共同点的节点 有人告诉我使用 EMF Compa
  • 如何在 TFS 构建定义中获取签入评论/消息?

    是否可以在 TFS 2013 构建定义 工作流程文件 中获取签入注释 消息 我看过BuildDetail但还没找到 注释是 a 的属性 a变更集 http msdn microsoft com en us library microsoft
  • 当锚标记仅触发 jQuery 操作而不重定向用户时,可以替代

    我的页面上有许多锚标记 它们仅触发同一页面上的 jQuery 操作 不会将用户重定向到另一个位置 这是锚标记的正常预期行为 我不想在我的应用程序中为每个操作都提供静态 URL 但是 我也不喜欢每次用户单击其中一个时都将其发送到页面顶部 a
  • 如何使椭圆跟随画布上的曲线

    我在尝试让椭圆正确遵循画布上的路径时遇到问题 我认为问题源于这样一个事实 我的迷你语法定义了 x 和 y 值之间的移动 但仅针对目标属性中的这些值之一 例如 Canvas Top or Canvas Left 我似乎在画布上找不到任何附加的
  • 我可以自动保存正在运行的 jupyter python 笔记本而不在浏览器选项卡中打开它吗?

    所以我有一个长期运行的Python笔记本 只要在我的浏览器选项卡中打开它 它就会每 2 分钟自动保存一次 生活很美好 即使我关闭浏览器选项卡 是否可以保持自动保存 当我关闭选项卡时 内核已经继续运行 这很棒 这有点像 屏幕 但是在 jupy
  • 模板参数上的 C++ 函数模板重载

    是否可以像这样重载函数模板 仅在使用enable if的模板参数上 template
  • Gradle:强制自定义任务始终运行(无缓存)

    我编写了一个自定义 Gradle 任务来处理路径可配置的文件系统上的一些依赖项解析 我希望这种类型的任务始终运行 我猜它们似乎只运行一次 因为输入似乎永远不会改变 我知道使用configurations resolutionStrategy
  • 没有声明为 public、private 或 protected 的变量是什么?

    如果代替 private JButton theButton 我这样定义一个字段 JButton theButton 有什么不同 Package
  • 如何通过推送通知打开 ios 应用程序?

    我可以知道如何打开 ios 应用程序 点击通知 或者当我们滑动通知图标时 如果 iPhone 被锁定 有人可以帮我吗 当点击通知时 操作系统会处理该行为 无论通知是否由第 3 方发送 如果它通过 APNS 它将打开应用程序并在内部appli
  • 如何在Linux中截图(高fps)(编程)

    首先我想说我已经阅读了很多关于这方面的内容并且学到了很多方法来做到这一点 但是我还没有能够在linux中做到这一点 我的项目是一个带有arduino的流光溢彩的项目 所以我需要截取桌面的屏幕截图并分析它的颜色 一开始 我使用Processi
  • 为 64 位 LCG 找到更多独立的种子值(MMIX(由 Knuth))

    I m using a 64 bit LCG MMIX by Knuth It generate a certain block of random numbers inside my code which use them to perf
  • Entity Framework Core - 延迟加载

    根据我的 Visual Studios 请求 我使用 Entity Framework Core 1 0 1 开始了我的最新项目 因此 编写我的数据库模型时 我总是使用 虚拟 说明符来启用列表的延迟加载 尽管在加载父表时 子列表似 乎从未加
  • 使用 golang 对每个请求实现上下文超时

    我正在尝试处理每个请求的上下文超时 我们有以下服务器结构 流程概述 去服务器 基本上 充当 反向代理 2 https en wikipedia org wiki Reverse proxy 认证服务器 检查请求身份验证 应用服务器 核心请求
  • 如何覆盖 FosUser 注册表单布局的布局。

    如何覆盖注册表的布局 目前的形式是 username email password verification 我想要覆盖此表单的布局 比如说 每行两个问题 username email additional text password ve
  • 使用 Q 打破动态的 Promise 序列

    我有几个承诺 P1 P2 Pn 我想将它们按顺序链接起来 所以 Q all 不是一个选项 并且我想在第一个错误时打破链条 每个承诺都有其自己的参数 我想拦截每个承诺错误以转储错误 如果 P1 P2 PN 是我的承诺 我不知道如何自动化该序列