降阶: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完成
网友评论