【问题标题】:ReactiveCocoa - flattenMap block never calledReactiveCocoa - flattenMap 块从未被调用
【发布时间】:2017-08-02 11:16:19
【问题描述】:

我在使用RACSignalflattenMap 方法时遇到问题 - 块永远不会被调用。如果我subscribeNext 到同一个信号,它工作得很好,问题只出在flattenMap

这就是正常工作

[[self.aSignal combineLatestWith:self.otherSignal] subscribeNext:^(RACTuple *tuple) {
    // gets called just fine
}];

这是行不通的:

self.yetAnotherSignal = [[self.aSignal combineLatestWith:self.otherSignal] flattenMap:^RACStream *(RACTuple *tuple) {
    // never gets called
    return returnSignal;
}];

我错过了什么吗?还是我误解了flattenMap 的工作原理?

【问题讨论】:

    标签: ios objective-c reactive-cocoa


    【解决方案1】:

    您似乎只缺少一点点:(至少在您的 sn-p 中)没有人订阅您的新信号!

    您正在通过combineLatestflattenMapself.aSignalself.otherSignal 构造一个新信号(self.yetAnotherSignal)。

    但是这个新信号,以及链中的任何操作符,在以某种形式订阅之前实际上不会做任何工作,最简单的形式是通过subscribeNext,就像你在第一个 sn-p 中所做的那样。

    这不仅仅是flattenMap的情况,任何操作都一样,例如如果您不订阅,combineLatestWith 在您的第一个示例中将不会做任何事情。 mapfilter 也是如此。

    【讨论】:

    • 另外值得注意的是,combineLatestWith 在两个输入信号都发送至少一个值之前不会发送任何内容。
    猜你喜欢
    • 2015-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 2016-08-21
    相关资源
    最近更新 更多