Skip to content
Thomas Kalka edited this page Jul 9, 2018 · 3 revisions

** Needs Words **

one way to accomplish transactions... or action-reaction using a graph database to track the transaction.

Method 1)

This is a transaction to login an account.

create a record like { name : 'user', password:'password'} and put it in the graph at a place the server has mapped.

// on a client.... 

var db = gun.get( 'dbRoot' );

db.get( "signup" ).get( "ack" ). map( serverAckSignup )
function serverAckSignup( ack, field ) {
   // field will = signup...
   if( ack.user_id ) ...  // do soemthing to save my credientials for later proof?
}


db.get( 'signup').put( { name : 'user', password:'password' } ):

The server will receive the signup record from the client, and then be able to process that, and add a user_id to the transaction, which will be sent to the client, which should have the transaction they started mapped.

// on a server
var db = gun.get( 'dbRoot' );
db.get( "signup" ).map( handleSignupEvent )
function handleSignupEvent( signup, field ) {
   // field will = signup...
   this.get( "ack" ).put( { user_id : "some ID", ... } );
}

when the signup is put, the server gets it, puts an ack(user_id), that then the client gets. viola - transaction.

Previously completed transactions can be checked for completion and steps ignored....

if( !( "user_id" in signup ) ) {
   // then do the work, otherwise the job was already done.
}

Method 2)

Mark shared an example a long time ago that was more nested... like

{ data : 123 }

{ result : { data : 123 } }

{ data : 123,
  result : { data : 123 
      , result : { data : 123 }
  }
}

which works  more like 
gun.db
   .map().on( (val)=>{
   } ).map().on( (val)=>{
   } ).map().on( (val)=>{
   } ).map().on( (val)=>{
   } );

This wiki is where all the GUN website documentation comes from.

You can read it here or on the website, but the website has some special features like rendering some markdown extensions to create interactive coding tutorials.

Please feel free to improve the docs itself, we need contributions!

Clone this wiki locally