title: Cucumber Js callback issue? or feature issue?
body: <p>I'd like to write a feature like this:</p>
  
  <pre><code>Scenario: new Singleton create
    When a new, unmatchable identity is received
    Then a new tin record should be created
     And a new bronze record should be created
     And a new gold record should be created
  </code></pre>
  
  <p>which would tie to steps like this:</p>
  
  <pre><code>defineSupportCode(function ({ Before, Given, Then, When }) {
  
    var expect = require('chai').expect;
    var chanceGenerator = require('./helpers/chanceGenerator')
    var request = require('./helpers/requestGenerator')
  
    let identMap;
  
    // reset identMap before each scenario 
    Before(function () {
      identMap = [];
    });
  
    // should generate a valid identity
    // persist it in a local variable so it can be tested in later steps
    // and persist to the db via public endpoint
    When('a new, unmatchable identity is received', function (callback) {
      identMap.push(chanceGenerator.identity());
      request.pubPostIdentity(identMap[identMap.length-1], callback);
    });
  
    // use the local variable to retrieve Tin that was persisted
    // validate the tin persisted all the props that it should have
    Then('a new tin record should be created', function (callback) {
      request.pubGetIdentity(identMap[identMap.length-1], callback);
  
      // var self = this;
  
      // request.pubGetIdentity(identMap[identMap.length-1], callback, () =&gt; {
      //   console.log('never gets here...');
      //   self.callback();
      //   callback();
      // });
  
      // request.pubGetIdentity(identMap[identMap.length-1], (callback) =&gt; {
      //   console.log('never gets here...');
      //   self.callback();
      //   callback();
      // });
  
    });
  </code></pre>
  
  <p>The issue that I'm having is that I can't do anything in the Then callback.  That is where I'd like to be able to verify the response has the right data.</p>
  
  <p>Here are relevant excerpts from the helper files:</p>
  
  <pre><code>var pubPostIdentity = function (ident, callback) {
    console.log('pubIdentity');
    var options = {
      method: 'POST',
      url: 'http://cucumber.utu.ai:4020/identity/' + ident.platform + '/' + ident.platformId,
      headers: {
        'X-Consumer-Custom-Id': ident.botId + '_' + ident.botId
      },
      body: JSON.stringify(ident)
    };
    console.log('ident: ', ident);
    request(options, (err, response, body) =&gt; {
      if (err) {
        console.log('pubPostIdentity: ', err);
        callback(err);
      }
      console.log('pubPostIdentity: ', response.statusCode);
      callback();
    });
  }
  
  // accept an identity and retrieve from staging via identity public endpoint
  var pubGetIdentity = function (ident, callback) {
    console.log('pubGetIdentity');
    var options = {
      method: 'GET',
      url: 'http://cucumber.utu.ai:4020/identity/' + ident.platform + '/' + ident.platformId,
      headers: {
        'X-Consumer-Custom-Id': ident.botId + '_' + ident.botId
      }
    };
    request(options, (err, response) =&gt; {
      if (err) {
        console.log('pubGetIdentity: ', err);
        callback(err);
      }
      console.log('pubGetIdentity: ', response.body);
      callback();
    });
  }
  </code></pre>
  
  <p>Something that we are considering as an option is to re-write the feature to fit a different step definition structure.  If we re-wrote the feature like this:</p>
  
  <pre><code>Scenario: new Singleton create
      When a new, unmatchable 'TIN_RECORD' is received
      Then the Identity Record should be created successfully
      When the Identity Record is retreived for 'tin'
      Then a new 'tin' should be created
      When the Identity Record is retreived for 'bronze'
      Then a new 'bronze' should be created
      When the Identity Record is retreived for 'gold'
      Then a new 'gold' should be created
  </code></pre>
  
  <p>I believe it bypasses the instep callback issue we are wrestling with, but I really hate the breakdown of the feature.  It makes the feature less readable and comprehensible to the business.</p>
  
  <p>So... my question, the summary feature presented first, is it written wrong?  Am I trying to get step definitions to do something that they shouldn't?  Or is my lack of Js skills shining bright, and this should be very doable, I'm just screwing up the callbacks?</p>