title: Combine and reduce but wait for each signal to complete before subscribing to next one
body: <p>I have 2 network signals and the first one needs to complete before the next one starts because I need to send an <code>accessToken</code> for the second request and I obtain that in the first request. Then I want to reduce the values from each step into a single object. I guess <code>combineLatest:reduce:</code> subscribes to both of them and has nothing to do with waiting completion of signal.</p>
  
  <p>I have this right now:</p>
  
  <pre><code>- (RACSignal *)loginWithEmail:(NSString *)email password:(NSString *)password
  {
      @weakify(self);
      RACSignal *authSignal = [[self requestTokensWithUsername:email password:password]  
          doNext:^(Authentication *auth) {
              @strongify(self);
              self.authentication = auth;  
          }];
  
      RACSignal *profileSignal = [self fetchProfile];
      NSArray *orderedSignals = @[ authSignal, profileSignal ];
      RACSignal *userSignal =
          [RACSignal combineLatest:orderedSignals
                            reduce:^id(Authentication *auth, Profile *profile) {
                                NSLog(@"combine: %@, %@", auth, profile);
                                return [User userWithAuth:auth profile:profile history:nil];
                            }];
  
      return [[[RACSignal concat:orderedSignals.rac_sequence] collect]
          flattenMap:^RACStream * (id value) {                
              return userSignal;
          }];
  }
  </code></pre>
  
  <p>To ensure that they are done in order, I return a signal where I first <code>concat:</code> the signals, then <code>collect</code> them to send completed only when all of the signals complete, and <code>flattenMap:</code> to a <code>combineLatest:reduce:</code> to process latest result from each. </p>
  
  <p>It works but I think there might be a more concise and better way to do this. How might I rewrite this part to make it more concise maybe?</p>