美文网首页
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