美文网首页
RAC的降阶:flatten操作

RAC的降阶:flatten操作

作者: 凯司机 | 来源:发表于2021-05-10 18:45 被阅读0次

    降阶:flatten

      RACSignal *signalA1 = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
          [subscriber sendNext:@1];
          [subscriber sendNext:@2];
          [subscriber sendNext:@3];
          [subscriber sendNext:@4];
          [subscriber sendNext:@5];
          [subscriber sendCompleted];
          return [RACDisposable disposableWithBlock:^{
              NSLog(@"signalA1完成");
          }];
      }];
    
      RACSignal *signalA2 = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
          [subscriber sendNext:@"a"];
          [subscriber sendNext:@"b"];
          [subscriber sendNext:@"c"];
          [subscriber sendNext:@"d"];
          [subscriber sendNext:@"e"];
          [subscriber sendCompleted];
          return [RACDisposable disposableWithBlock:^{
              NSLog(@"signalA2完成");
          }];
      }];
    
      RACSignal *signalB1 = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
          [subscriber sendNext:signalA1];
          [subscriber sendNext:signalA2];
          [subscriber sendCompleted];
          return [RACDisposable disposableWithBlock:^{
              NSLog(@"signalB1完成");
          }];
      }];
    
      RACSignal *signalD = [signalB1 flatten];
    //    RACSignal *signalD = [signalB1 flatten:2];
    // 该方法的作用时,同时最多同时执行2个信号,也就是可以解决最大并发量的问题。处理排队,重新添加。
    //    RACSignal *signalD = [signalB1 flatten:1];
    // 信号串行,信号1执行完之后,继续执行下一个信号。
      [[signalD subscribeNext:^(id x) {
          NSLog(@"subscribeNext:%@",x);
      }] dispose];
    
    
    
    RACSignal *signalA2 = [[RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
      [subscriber sendNext:@"a"];
      [subscriber sendNext:@"b"];
      [subscriber sendNext:@"c"];
      [subscriber sendNext:@"d"];
      [subscriber sendNext:@"e"];
      [subscriber sendCompleted];
      return [RACDisposable disposableWithBlock:^{
          NSLog(@"signalA2完成");
      }];
    }] delay:0.5];
    // 这样写会阻塞主线程、如果先dispose之后,则剩余的信号则不再执行。
    

    2021-04-15 14:57:43.580337+0800 XXXXXX[3720:1082806] subscribeNext:1

    2021-04-15 14:57:43.580376+0800 XXXXXX[3720:1082806] subscribeNext:2

    2021-04-15 14:57:43.580386+0800 XXXXXX[3720:1082806] subscribeNext:3

    2021-04-15 14:57:43.580396+0800 XXXXXX[3720:1082806] subscribeNext:4

    2021-04-15 14:57:43.580405+0800 XXXXXX[3720:1082806] subscribeNext:5

    2021-04-15 14:57:43.581719+0800 XXXXXX[3720:1082806] signalA1完成

    2021-04-15 14:57:43.582042+0800 XXXXXX[3720:1082806] subscribeNext:a

    2021-04-15 14:57:43.582066+0800 XXXXXX[3720:1082806] subscribeNext:b

    2021-04-15 14:57:43.582088+0800 XXXXXX[3720:1082806] subscribeNext:c

    2021-04-15 14:57:43.582097+0800 XXXXXX[3720:1082806] subscribeNext:d

    2021-04-15 14:57:43.582106+0800 XXXXXX[3720:1082806] subscribeNext:e

    2021-04-15 14:57:43.582430+0800 XXXXXX[3720:1082806] signalA2完成

    2021-04-15 14:57:43.582539+0800 XXXXXX[3720:1082806] signalB1完成

    相关文章

      网友评论

          本文标题:RAC的降阶:flatten操作

          本文链接:https://www.haomeiwen.com/subject/vfvirltx.html