如何在没有嵌套订阅的情况下订阅命令执行信号的完成?

2023-11-27

我尝试了以下操作但没有成功。等效使用-subscribeNext:按预期工作。

// A
[[_viewModel.loginCommand.executionSignals flatten] subscribeCompleted:^{
    NSLog(@"A");
}];

我唯一的工作实现如下:

// B
[_viewModel.loginCommand.executionSignals subscribeNext:^(RACSignal *loginSignal) {
    [loginSignal subscribeCompleted:^{
        NSLog(@"B");
    }];
}];

为什么不-flatten在“A”中工作,如何重写“B”以不使用嵌套订阅?


The -flatten运算符返回一个仅当所有内部信号都完成时才完成的信号,这需要外部信号也完成。同样的道理-concat。因此,一旦应用任一运算符,生成的信号就无法表示单独的完成情况,而只能表示最终的聚合完成情况。

除了嵌套订阅之外,您还可以转换内部信号,以便它们发送一个表示完成的值。这样做的一种方法是-materialize:

[[[_viewModel.loginCommand.executionSignals
    map:^(RACSignal *loginSignal) {
        // Using -ignoreValues ensures only the completion event is sent.
        return [[loginSignal ignoreValues] materialize];
    }]
    concat]
    subscribeNext:^(RACEvent *event) {
        NSLog(@"Completed: %@", event);
    }];

请注意,我使用了-concat代替-flatten,因为它符合语义RACCommand的默认串行执行。他们最终在这种情况下做了同样的事情,-flatten退化为行为-concat因为该命令一次只执行一个信号。

Using -materialize不是执行此操作的唯一方法,它只是碰巧发送一个表示完成的值,但这可以是您认为对您的用例适当重要的任何值。

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

如何在没有嵌套订阅的情况下订阅命令执行信号的完成? 的相关文章

随机推荐

  • 如何将按钮添加到settings.bundle?

    我正在开发一个 iPhone 应用程序 默认情况下用户保持登录状态 如果他想注销 他应该打开 设置 并单击 注销 按钮 这将删除他的数据并在下次打开应用程序时要求登录 如何添加这样的按钮 就像 Twitter 设置中一样 正如 CodaFi
  • vb.net 从创建它的线程以外的线程访问

    我正在尝试将文本设置为标签Label caller Text phone number我收到此错误 System InvalidOperationException 跨线程操作无效 从创建它的线程以外的线程访问控制 Label caller
  • 如何在 Spring Security 中启用 POST、PUT 和 DELETE 方法

    我用 Spring Boot 开发了一个应用程序 运行良好 有一个安静的控制器 我尝试向某些页面添加 spring security 其余控制器的端点是 api greetings 我在下面的类中配置了安全设置 Configuration
  • 解析 xml 时出错:与 Facebook SDK 未绑定前缀

    我的项目无法识别 xml 中的 com facebook widget ProfilePictureView 或其他小部件 我导入了 facebook sdk 甚至用它来登录并与 open graph 交互 这一切都有效 我只是想添加一个个
  • 如何用D3添加简单的圆弧

    我想在图表部分添加一个简单的弧线 如圆 vis append circle style stroke gray style fill white attr r 40 attr cx 50 attr cy 50 所提供的D3的例子正在处理数据
  • 如何在for循环中使用setInterval函数

    我正在尝试在给定可变项目列表的情况下运行多个计时器 代码看起来像这样 var list Array for var x in list setInterval function list x 10 console log x gt list
  • 在堆栈跟踪中获取 VB.NET 行号

    我有一个 VB NET 2010 Winforms 应用程序 我想在堆栈跟踪中包含行号 我已阅读以下问题和答案 如何在VB net中运行应用程序时打印行号 其中提到 您始终需要在代码中包含 PDB 文件 其中包含在此类情况下使用的调试信息
  • Git 中的 commit-ish 和 tree-ish 是什么?

    问题 Git 中 commit ish 和 tree ish 的具体例子有哪些 堆栈溢出问题 git 中的 tree ish 是什么意思 交易 特别是树型 但我想了解更多both 背景 文档中的用法 Git 文档多次提到 commit is
  • Microsoft Edge window.open() 不支持宽度高度,并在后台打开

    我使用的是 Windows 10 预览版 Build 10130 并且window open新 Edge 浏览器中的方法的行为不符合规范 如果您使用示例代码https msdn microsoft com en us library ms5
  • 如何设置 Filezilla Pro 来访问我的 s3 存储桶?

    我购买了支持 Amazon S3 的 Filezilla Pro 请问如何设置 Filezilla Pro 访问我的存储桶 谢谢 对上述答案的一个重要补充 我的 S3 用户名和密码是什么 用户名 访问密钥 最好是仅具有访问特定 S3 存储桶
  • iPhone SDK 与静态库链接错误

    我已经构建了自己的静态库 其中包含要在项目中重用的组件 最近需要更新一堆类 具体来说 由于某些类更改了名称 某些方法的签名也发生了更改 现在发生的情况是 该库本身可以正常编译 但是 当添加到应用程序项目时 该项目无法链接 Ld build
  • javascript - 获取函数内异步函数的返回数据

    我遇到问题 因为 chrome api 函数是异步的 我无法获取其返回值 考虑以下代码 我正在使用 AngularJS scope storageGet function param var returnData chrome storag
  • 使用 itextsharp 阅读 PDF,其中 PDF 语言为非英语

    我正在尝试阅读thisPDF 使用 C 中的 itextsharp 将此 pdf 转换为 word 文件 它还需要维护Word中的表格格式和字体 当我尝试使用英语 pdf 时 它会完美工作 但使用一些印度语言 如印地语 马拉地语 时 它不起
  • jqgrid 添加行并将数据发送到 webservice 进行插入

    我已经能够使用 jQuery Ajax 将数据从 Web 服务中提取到 jQGrid 中 现在我想将添加 编辑的数据发送回网络服务 我已经看过一些使用 PHP 和 editurl 命令的示例 这也适用于网络服务吗 就像我最初提取数据的方式一
  • 使用 Reactive Banana 进行一些基本微积分

    Setup 我正在使用 Reactive Banana 和 OpenGL 并且我有一个想要旋转的齿轮 我有以下信号 bTime Behavior t Int the time in ms from start of rendering bA
  • SwiftUI UITextView 协调器不工作

    我包了一个UITextView in a UIViewRepresentable并包括一个Coordinator as UITextViewDelegate 但事件未被调用 我究竟做错了什么 struct TextView UIViewRe
  • Session ID 是在服务器端还是客户端生成的?

    这个网页http www w3schools com ASP prop sessionid asp表明会话 ID 是在服务器端生成的 如果是这种情况 那么服务器如何知道它在第二个请求响应周期仍然是同一个客户端 SessionId 肯定会在客
  • 安装 CMake 库:还为依赖项提供查找模块?

    我的 CMake 库 MyLibrary 具有依赖性OtherLibrary 我用一个导入非标准 FindOtherLibrary cmake 我的图书馆取决于OtherLibrary公开 target link libraries MyL
  • MVC4 区域和表单身份验证

    我有一个设置了多个区域的 MVC4 应用程序 每个区域必须有自己的登录页面 举例来说 我有以下领域 主要的 行政 如何设置才能使 主要 区域与 管理 区域具有不同的登录页面 我认为 web config 不是解决这个问题的方法 目前我的根
  • 如何在没有嵌套订阅的情况下订阅命令执行信号的完成?

    我尝试了以下操作但没有成功 等效使用 subscribeNext 按预期工作 A viewModel loginCommand executionSignals flatten subscribeCompleted NSLog A 我唯一的