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

保罗·杨

我尝试了以下方法,但均未成功。等效的使用-subscribeNext:效果符合预期。

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

我唯一可行的实现如下:

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

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

李戴夫

-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由于命令一次只执行一个信号。

使用-materialize不是做到这一点的唯一方法,它恰好会发送一个表示完成的值,但这可能是您认为对用例有意义的任何值。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在没有嵌入式订阅的情况下执行一个异步操作

来自分类Dev

如何在没有Office 365订阅的情况下使用变体过渡?

来自分类Dev

如何在没有密码的情况下远程执行ssh命令和sudo命令

来自分类Dev

如何在没有sudo的情况下执行'iftop'

来自分类Dev

如何在没有警告的情况下执行resolvconf?

来自分类Dev

如何在不嵌套订阅的情况下使用rxjs进行第二次调用

来自分类Dev

如何在没有信号的情况下监视子进程?

来自分类Dev

(所有变体)如何在输入任何命令的情况下执行特定命令?

来自分类Dev

Rxjava:如何在没有完成所有 observable 的情况下组合多个 observable?

来自分类Dev

C#-在没有处理程序类型的情况下订阅时发生奇怪的事件行为

来自分类Dev

为什么Ngrx选择器会在没有订阅的情况下触发?

来自分类Dev

在订阅控制器中没有ID的情况下找不到计划

来自分类Dev

如何在没有自定义订阅者的情况下调整Combine的发布者需求?

来自分类Dev

如何在没有执行权限的情况下执行文件

来自分类Dev

Matlab:如何在没有Tab的情况下激活自动完成功能?

来自分类Dev

如何在没有Tab键的情况下触发自动完成功能?

来自分类Dev

如何在没有@或#等字符触发的情况下实现jquery自动完成

来自分类Dev

如何在不阻止垃圾回收的情况下订阅事件?

来自分类Dev

如何在不使用API的情况下获取Instagram订阅供稿?

来自分类Dev

如何在不丢失活动订阅者的情况下更新Observable?

来自分类Dev

如何在没有嵌套查询的情况下在MySQL中执行组聚合?

来自分类Dev

如何在Ruby中没有已知深度的情况下遍历深层嵌套哈希

来自分类Dev

如何在没有路径的情况下查询嵌套文档中的值?

来自分类Dev

React:如何在没有键名的情况下映射嵌套的 JSON 对象

来自分类Dev

如何在没有来自其他类的嵌套对象的情况下返回 JSON 对象?

来自分类Dev

如何在没有 foreach 的情况下使用 linq 过滤嵌套对象?

来自分类Dev

如何在没有for循环的情况下执行此操作

来自分类Dev

在Java中,如何在没有完整路径的情况下执行外部应用

来自分类Dev

如何在没有返回类型或回调的情况下执行DELETE请求?[改造]

Related 相关文章

  1. 1

    如何在没有嵌入式订阅的情况下执行一个异步操作

  2. 2

    如何在没有Office 365订阅的情况下使用变体过渡?

  3. 3

    如何在没有密码的情况下远程执行ssh命令和sudo命令

  4. 4

    如何在没有sudo的情况下执行'iftop'

  5. 5

    如何在没有警告的情况下执行resolvconf?

  6. 6

    如何在不嵌套订阅的情况下使用rxjs进行第二次调用

  7. 7

    如何在没有信号的情况下监视子进程?

  8. 8

    (所有变体)如何在输入任何命令的情况下执行特定命令?

  9. 9

    Rxjava:如何在没有完成所有 observable 的情况下组合多个 observable?

  10. 10

    C#-在没有处理程序类型的情况下订阅时发生奇怪的事件行为

  11. 11

    为什么Ngrx选择器会在没有订阅的情况下触发?

  12. 12

    在订阅控制器中没有ID的情况下找不到计划

  13. 13

    如何在没有自定义订阅者的情况下调整Combine的发布者需求?

  14. 14

    如何在没有执行权限的情况下执行文件

  15. 15

    Matlab:如何在没有Tab的情况下激活自动完成功能?

  16. 16

    如何在没有Tab键的情况下触发自动完成功能?

  17. 17

    如何在没有@或#等字符触发的情况下实现jquery自动完成

  18. 18

    如何在不阻止垃圾回收的情况下订阅事件?

  19. 19

    如何在不使用API的情况下获取Instagram订阅供稿?

  20. 20

    如何在不丢失活动订阅者的情况下更新Observable?

  21. 21

    如何在没有嵌套查询的情况下在MySQL中执行组聚合?

  22. 22

    如何在Ruby中没有已知深度的情况下遍历深层嵌套哈希

  23. 23

    如何在没有路径的情况下查询嵌套文档中的值?

  24. 24

    React:如何在没有键名的情况下映射嵌套的 JSON 对象

  25. 25

    如何在没有来自其他类的嵌套对象的情况下返回 JSON 对象?

  26. 26

    如何在没有 foreach 的情况下使用 linq 过滤嵌套对象?

  27. 27

    如何在没有for循环的情况下执行此操作

  28. 28

    在Java中,如何在没有完整路径的情况下执行外部应用

  29. 29

    如何在没有返回类型或回调的情况下执行DELETE请求?[改造]

热门标签

归档