lib/stream/s3ListObjectStream.js
function listRecusively (marker) {
    options.marker = marker;

    self.listObjectsPage(
      options,
      function (error, nextMarker, s3Objects) {
        if (error) {
          return callback(error);
        }

        // Send all of these S3 object definitions to be piped onwards.
        s3Objects.forEach(function (object) {
          object.Bucket = options.bucket;
          self.push(object);
        });

        if (nextMarker) {
          listRecusively(nextMarker);
        }
        else {
          callback();
        }
      }
    );
  }
function listRecusively (marker) {
    options.marker = marker;

    self.listObjectsPage(
      options,
      function (error, nextMarker, s3Objects) {
        if (error) {
          return callback(error);
        }

        // Send all of these S3 object definitions to be piped onwards.
        s3Objects.forEach(function (object) {
          object.Bucket = options.bucket;
          self.push(object);
        });

        if (nextMarker) {
          listRecusively(nextMarker);
        }
        else {
          callback();
        }
      }
    );
  }
Recursively list objects.

@param {String|undefined} marker A value provided by the S3 API to enable
paging of large lists of keys. The result set requested starts from the
marker. If not provided, then the list starts from the first key.