PromiseKit 取消承诺

2024-01-08

如何取消尚未履行或拒绝的承诺?

PromiseKit 的文档讨论了取消承诺,但我找不到如何执行此操作的具体示例。

Given:

currentOperation = client.load(skip: skip, query: nil)
currentOperation!.then { (items) in
   self.processItems(items: items, skip: skip, query: query)
}.catch { (error) in
    print("failed to load items - just retrying")
    self.loadIfNeeded(skip: skip, query: query, onlyInStock: onlyInStock)
}

如果查询发生变化(用户在搜索栏中输入一些文本),我想取消并放弃currentOperation,开始新的承诺。


为了取消承诺,您必须使用符合以下条件的任何错误类型来拒绝它:CancellableError协议。这样任何 catch 块policy参数设置为allErrorsExceptCancellation会让错误通过。

如果您需要 CancellablePromise,您可以继承 Promise 并实现一个 cancel() 函数,该函数将拒绝CancellableError当被叫时。这是一个最小的实现:

https://gist.github.com/EfraimB/918eebdf7dd020801c72da1289c8d797 https://gist.github.com/EfraimB/918eebdf7dd020801c72da1289c8d797

UPDATE:

这是新 PromiseKit 版本 (6.4.1) 的更新

https://gist.github.com/EfraimB/3ac240fc6e65aa8835df073f68fe32d9 https://gist.github.com/EfraimB/3ac240fc6e65aa8835df073f68fe32d9

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

PromiseKit 取消承诺 的相关文章

  • NSUserDefaults、Settings.bundle 和应用程序组

    我有一个有 2 个目标的应用程序 主应用程序和 Today 扩展 为了在这些目标之间共享设置 我打开了应用程序组功能 添加了一个组group myApp com然后使用NSUserDefaults在主应用程序和今日扩展中都是如此 var d
  • 小部件配置在 macOS 上不起作用

    我为我的 iOS 应用程序制作了一个小部件 效果很好 现在我正在将其移植到我的 macOS 应用程序中 但不知何故 小部件配置不起作用 这些项目已显示 但我无法以某种方式选择它们 查看屏幕截图 但请看一下我制作的视频 https youtu
  • 先下载数据,然后在TableViewcontroller上显示

    我有 tableviewcontroller 和从服务器获取的数据 我使用以下类来下载异步数据 但我的问题是当用户看到 tableViewcontroller 时正在加载数据 我希望在用户看到之前加载数据 import
  • 设置属性文本后防止 UILabel 字体自动更改

    我发现如果我将属性文本设置为UILabel 预定义字体将更改为属性文本第一个字符的字体 例如 the font size is set to 20 in Interface Builder println theLabel font poi
  • 使用 ARKit 加载的 3D 文件有大小限制吗?

    我正在使用 ARKit 开发一个增强现实应用程序 我们需要在其中加载一组建筑物的 3D 模型 我计划是检测水平面并将物体放置在那里 3D 模型或检测到的平面尺寸有尺寸限制吗 如果您谈论的是文件的物理大小 我应该说每个模型的多边形数量比以 M
  • 如何在不使用 Cocos2D 的情况下将声音实现到现有应用程序中

    例如 iOS SDK下载页面上有示例代码 我正在使用计算器应用程序 iPhoneUnitTests 我想知道是否可以轻松地向已构建的应用程序上的按钮添加声音 播放短声音 例如按钮声音 实际上非常简单 这是一个简单的例子 您必须链接 Audi
  • didChangeCameraPosition 获取可用坐标的边界框/矩形

    如何从 GMSCameraPosition 检索 GMSColinedBounds 我想知道每次用户移动相机时地图上的可见坐标 至少东北 西南点 如下所示 void mapView GMSMapView mapView didChangeC
  • 如何更改故事板的初始视图控制器?

    我有2个视图控制器 我禁用了第一个视图控制器的初始视图控制器 并启用了第二个视图控制器 但是当启动项目时 初始视图控制器仍然是第一个视图控制器 我该怎么办 谢谢 点击第二个视图控制器 然后选择 Is initial View Control
  • 如何通过单击颤动推送通知来打开特定屏幕

    我试图在单击推送通知时打开特定屏幕 我的有效负载如下所示 var payload notification title notificationTitle body notificationMessage click action scre
  • 在制作自定义 iOS 键盘扩展时,如何创建一个与 Apple 原始退格键具有相同功能的按钮?

    我正在制作一个自定义键盘 其中有用于删除文本的删除按钮 其代码是 func addDelete deleteButton UIButton buttonWithType System as UIButton deleteButton set
  • iOS 版有 Parse.com 的替代品吗? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我目前使用 parse com 来管理用户 他们有很棒的 AP I 有不错的后端供我管理东西 但我更愿意托管我自己的数据 服务器后端 我可
  • Swift 自定义 UITableViewCell 标签始终为零

    我已经被这个问题困扰好几天了 所以如果有人能提供帮助 我会很高兴 我正在尝试创建一个动态 UITableView 为此我创建了一个自定义 UITableView 子类 并且还创建了一个自定义 UITableViewCell 子类 因为我需要
  • 运行 pod install 时出错 - 在目标“Runner”上自动分配版本“8.0”的平台“iOS”

    你好 我无法用 Cocoapods 解决这个问题 任何人都可以帮助我 这是我第一次使用这个导入 导入 包 flutter vlc player flutter vlc player Dart 而不是可能出什么问题 我在mac上使用andro
  • 如何将 Swift 字符串传递给 C 函数?

    我在将字符串从 swift 传递到用 c 编写的函数时遇到严重问题 我正在尝试在我的快速代码中执行此操作 var address 192 168 1 2 var port 8888 initSocket address port c 函数如
  • 以编程方式快速呈现视图控制器

    您好 我正在尝试将以下目标 C 代码转换为 swift 以便在单击按钮时从一个视图控制器导航到另一个视图控制器 任何帮助将非常感激 这是摘自苹果的编程指南 void add id sender Create the root view co
  • 方向改变后的javascript最大视口高度Android和iOS

    目标 查找设备的最大视口高度 包括设备的空间address bar这样我们就可以动态调整 min body 的大小并将内容向上推 问题 移动浏览器处理方向状态的方式不同 方向变化时更新 DOM 属性的方式也不同 使用 JavaScript
  • 本地化 watchkit 配套应用程序的显示名称

    我在 Apple Watch 配套应用程序上本地化应用程序显示名称时遇到一些问题 按照指导方针 我将 CFBundleName 本地化如下 CFBundleDisplayName 我的应用程序 CFBundleName 我的应用程序 我为我
  • 创建一个扩展来从 Swift 中的数组中过滤 nils

    我正在尝试编写一个 Array 扩展 它将允许可选 T 数组转换为非可选 T 数组 例如这可以写成一个自由函数 如下所示 func removeAllNils array T gt T return array filter 0 nil r
  • 更改 UIActionSheet 标题字符串的字体类型和大小

    我有一个带有标题字符串 DO 这些任务 的 UIActionSheet 在标题字符串中 子字符串 DO 应为粗体 具有特定字体大小 子字符串 这些任务 应为常规 是否可以 我怎样才能做到这一点 我假设你有一个类实现了UIActionShee
  • 用于测试对象类型的通用 Swift 函数

    我正在尝试编写一个函数 该函数接受一个对象和一个类型作为参数 并返回一个布尔值 指示该对象是否属于给定类型 似乎没有 Type 类型 所以我不知道如何做到这一点 我能做的最好的就是 func objectIsType

随机推荐

  • Python 多处理问题?

    我有一个包含 500 个输入文件的文件夹 所有文件的总大小约为 500 MB 我想写一个python执行以下操作的脚本 1 将所有输入文件加载到内存中 2 初始化一个空的python稍后将使用的列表 参见项目符号 4 3 启动 15 个不同
  • 如何使用 Huggingface Trainer 微调 gpt-j

    我正在尝试使用 Huggingface 训练器微调 gpt j 但惨败 我遵循了引用 bert 的示例 但是当然 gpt j 模型并不完全类似于 bert 模型 该错误表明模型没有产生损失 这很好 但我不知道如何让它产生损失或如何改变训练者
  • 如何在postgresql中使用for循环创建多个表

    如何使用一个表创建多个表forpostgresql 中的循环 例如 我需要创建 c emloyee r employee i employee 等 我在 FOR 附近遇到语法错误 bin sh Invoke postgre SQLVARCH
  • 将流拆分为具有 N 个元素的子流

    我们能否以某种方式将 Java 中的流拆分为不超过 N 个元素的子流 例如 Stream
  • 如何在.NET中编辑EXIF数据[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在编写一个照片库 共享网站 并且想要 1 将 EXIF 数据写入服务器上存储的 JPEG 以及 2
  • npm install 正在我的角度项目根目录中构建 .cmd 文件

    我有一个项目已经工作了很长一段时间 它已经构建和编译 并且仍然在不同的机器上执行 了几个月 现在 当我运行命令 npm install 时 它会正常运行 但在该过程结束时 它会在我的项目的根文件夹中构建大量 cmd 文件 以及另一个附带文件
  • 根据条件从列表中删除项目

    我有一个这样的结构 public struct stuff public int ID public int quan 并想要删除该产品ID is 1 我目前正在尝试这个 prods Remove new stuff prodID 1 它不
  • 如何在 Docker Compose V3 中扩展服务?

    我有一个docker compose yml看起来像 version 2 services redis image redis mysqldb image mysql 5 7 environment MYSQL ROOT PASSWORD
  • blogger+video.js 我如何添加质量级别,如 1080p、720p、480p

    我在我的中添加 video jshttps www blogger com https www blogger com网站 但我如何添加 1080p 720p 480p 等质量级别 我添加的代码 在头 在身体里
  • Angular 2 - 链接 http 请求

    我从 httpService 获取 RxJS Observable 这是来自 Angular 的实际 http 现在 一旦我得到积极的结果 我想处理我得到的下一个 http 请求this retrieve 这或多或少是串联请求 有更好的方法
  • 有没有办法为函数创建预处理器宏?

    是否可以根据函数结果创建 C 预处理器宏 例如 我想在预处理器宏定义中动态保存屏幕高度 define SCREEN HEIGHT GetSystemMetrics SM CYVIRTUALSCREEN 然后我想使用结果根据屏幕高度设置值 i
  • Spring Boot,如何在不使用 ldif 的情况下使用 LDAP 进行身份验证?

    我正在 Spring Boot 中尝试 LDAP 身份验证示例here https spring io guides gs authenticating ldap 它使用 ldif 方法 我认为该方法不适用于我的要求 因为我们的 ldap
  • 在变量中存储 const 值与在状态中存储 const 值有区别吗?

    我注意到有几种方法可以在 React 功能组件中实现看似相同的事情 当您拥有本质上仅在该组件内部需要的配置值 只是一个常量值 从未传入或修改 时 您可以只使用常规const或者您可以将其存储在组件的状态中 标准变量 function Exa
  • 附加到 Visual Studio Express 2013 for Web 中的进程

    我刚刚从 VS 2010 professional 升级到 VS 2013 Express for Web 但找不到 附加到进程 选项 该选项允许我调试托管在 IIS Web 服务器上的 Web 应用程序 该选项在 Windows 版 VS
  • 为什么 .Net 中的类默认不可序列化?

    开发人员必须通过显式使用来 选择 使类可序列化SerializableAttribute 如果类默认是可序列化的 会出现什么问题 我假设默认情况下类是不可序列化的 因为无法保证使用反射将对象的状态转储到流中是否有意义 如果您的对象拥有与数据
  • 在已弃用的 THREE.ImageUtils.loadTexture 上使用 THREE.TextureLoader 时出现纹理问题

    我正在使用这个函数在圆柱体上添加纹理 function createElementMaterial THREE ImageUtils crossOrigin var t THREE ImageUtils loadTexture IMG MA
  • 该类型存在于两个 DLL 中

    我想使用 Accord 库和 AForge 库中的一些东西 但是当我安装它时 我开始收到以下错误 Error CS0433 The type IntPoint exists in both AForge Version 2 2 5 0 Cu
  • Angular SSR localhost:4000 未打开

    我有一个 Angular 项目 我想让它兼容 seo 我使用 Angular Universal 执行此操作 但 localhost 4000 无法打开 当我输入 localhost 4000 index html 时 它会打开并重定向到
  • 如果做“math foo bar”,如何在 Mathematica 中获取 foo 和 bar?

    如果我将 Mathematica 运行为 math foo bar 什么变量保存 foo 和 酒吧 我猜它是 Something 但还没有找到它 谷歌搜索告诉我 Mathematica 接受命令行选项 例如 pwpath pwfile 但我
  • PromiseKit 取消承诺

    如何取消尚未履行或拒绝的承诺 PromiseKit 的文档讨论了取消承诺 但我找不到如何执行此操作的具体示例 Given currentOperation client load skip skip query nil currentOpe