Цепные зависимые сигналы в ReactiveCocoa

В ReactiveCocoa, если мы объединяем несколько зависимых сигналов, мы должны использоватьsubscribeNext: для следующего сигнала в цепочке, чтобы получить значение предыдущего сигнала (например, результат асинхронной операции). Итак, через некоторое время код превращается во что-то вроде этого (лишние детали опущены):

RACSignal *buttonClickSignal = [self.logIn rac_signalForControlEvents:UIControlEventTouchUpInside];

[buttonClickSignal subscribeNext:^(UIButton *sender) {    // signal from a button click
    // prepare data

    RACSignal *loginSignal = [self logInWithUsername:username password:password];    // signal from the async network operation

    [loginSignal subscribeNext:^void (NSDictionary *json) {
        // do stuff with data received from the first network interaction, prepare some new data

        RACSignal *playlistFetchSignal = [self fetchPlaylistForToken:token];         // another signal from the async network operation

        [playlistFetchSignal subscribeNext:^(NSDictionary *json) {
            // do more stuff with the returned data
        }];

        // etc
    }];
}];

Эта постоянно увеличивающаяся вложенность выглядит не намного лучше, чем нереактивный пример, приведенный в документации:

[client logInWithSuccess:^{
    [client loadCachedMessagesWithSuccess:^(NSArray *messages) {
        [client fetchMessagesAfterMessage:messages.lastObject success:^(NSArray *nextMessages) {
            NSLog(@"Fetched all messages.");
        } failure:^(NSError *error) {
            [self presentError:error];
        }];
    } failure:^(NSError *error) {
        [self presentError:error];
    }];
} failure:^(NSError *error) {
    [self presentError:error];
}];

Я что-то пропустил? Есть ли лучшая модель цепочки зависимых работ в ReactiveCocoa?

Ответы на вопрос(1)

Ваш ответ на вопрос