function verifyIntent(subject, op, target, data, cb) {
  var type = (_.isString(target)) ? target : target.type;
  var listeners = listenersFor(op, type);
  if (listeners.length === 0) { return cb(); }
  if (data && data.uuid) { delete(data.uuid); } // uuid is immutable, so don't include - even if it's in the data
  var intent = new Intent(subject, op, target, data);
  async.each(listeners,
    function(listener, callback) {
      try {
        listener(intent, callback);
      } catch (err) {
        cb(err);
      }
    },
    function(err) {
      cb(err, target);
    }
  );
}
function verifyIntent(subject, op, target, data, cb) {
  var type = (_.isString(target)) ? target : target.type;
  var listeners = listenersFor(op, type);
  if (listeners.length === 0) { return cb(); }
  if (data && data.uuid) { delete(data.uuid); } 
  var intent = new Intent(subject, op, target, data);
  async.each(listeners,
    function(listener, callback) {
      try {
        listener(intent, callback);
      } catch (err) {
        cb(err);
      }
    },
    function(err) {
      cb(err, target);
    }
  );
}
function verifyIntent ( subject , op , target , data , cb ) { var type = ( _ . isString ( target ) ) ? target : target . type ; var listeners = listenersFor ( op , type ) ; if ( listeners . length === 0 ) { return cb ( ) ; } if ( data && data . uuid ) { delete ( data . uuid ) ; } // uuid is immutable, so don't include - even if it's in the data var intent = new Intent ( subject , op , target , data ) ; async . each ( listeners , function ( listener , callback ) { try { listener ( intent , callback ) ; } catch ( err ) { cb ( err ) ; } } , function ( err ) { cb ( err , target ) ; } ) ; }
callback is just: function(err) if err, action should be abandoned & error is propogated no data is allowed to be changed by the function
callback is just : function ( err ) if err action should be abandoned & error is propogated no data is allowed to be changed by the function