В моем реактивном какао я хочу заблокировать вызовы функции, если предыдущий вызов все еще выполняется. Я добился этого следующим образом, но это больше похоже на взлом.
__block RACSignal * performSync = [[self performSync:connectionClient] take:1];
[[[self rac_signalForSelector:@selector(forceSync:)]]]
flattenMap:^RACStream *(id value) {
NSLog(kMILogLevelDebug, @"Perform sync requested");
return performSync;
}]
subscribeNext:^(id x) {
NSLog(kMILogLevelDebug,@"Sync is performed", [NSDate date]);
}
error:^(NSError *error) {
[self performSyncCompleted:error];
}
completed:^{
[self performSyncCompleted:nil];
performSync = [[self performSync:connectionClient] take:1];
}];
Итак, я создал сигнал PerformSync, который выполняется только один раз, и после его завершения я воссоздаю сигнал. Есть ли лучший способ выполнить вышеизложенное?