RACCommand - 处理执行信号
RACCommand - dispose executing signal
我对 RACCommand
的处理机制有点困惑。我想手动处理执行信号的订阅,但 disposableBlock
仅在 sendCompleted
事件后调用。这是我的真实任务的问题,希望有人能帮助我。
- (void)test {
RACCommand *rac_command = [[RACCommand alloc] initWithSignalBlock:^RACSignal *(id input) {
return [self signal];
}];
RACDisposable *rac_dispose = [[rac_command execute:nil] subscribeNext:^(id x) {}];
[rac_dispose dispose];
}
- (RACSignal *)signal {
return [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(4.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[subscriber sendNext:nil];
[subscriber sendCompleted];
});
return [RACDisposable disposableWithBlock:^{
NSLog(@"dispose block");
}];
}];
}
对您的块参数(对初始化器)创建的信号的订阅是 RACCommand 私有的,并且它不提供 API 来处理这些订阅。 RACCommand 将保持该订阅活动直到它完成,无论您是否处理从 -[RACCommand execute:].
返回的信号
换句话说,不幸的是没有办法做你想做的事。如果您需要取消模块参数创建的信号行为的能力,请考虑让这些信号检查某些条件。
我对 RACCommand
的处理机制有点困惑。我想手动处理执行信号的订阅,但 disposableBlock
仅在 sendCompleted
事件后调用。这是我的真实任务的问题,希望有人能帮助我。
- (void)test {
RACCommand *rac_command = [[RACCommand alloc] initWithSignalBlock:^RACSignal *(id input) {
return [self signal];
}];
RACDisposable *rac_dispose = [[rac_command execute:nil] subscribeNext:^(id x) {}];
[rac_dispose dispose];
}
- (RACSignal *)signal {
return [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(4.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[subscriber sendNext:nil];
[subscriber sendCompleted];
});
return [RACDisposable disposableWithBlock:^{
NSLog(@"dispose block");
}];
}];
}
对您的块参数(对初始化器)创建的信号的订阅是 RACCommand 私有的,并且它不提供 API 来处理这些订阅。 RACCommand 将保持该订阅活动直到它完成,无论您是否处理从 -[RACCommand execute:].
返回的信号换句话说,不幸的是没有办法做你想做的事。如果您需要取消模块参数创建的信号行为的能力,请考虑让这些信号检查某些条件。