<spanclass="kd">var</span><spanclass="nx">_</span><spanclass="o">=</span><spanclass="nx">require</span><spanclass="p">(</span><spanclass="s1">'lodash'</span><spanclass="p">);</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Creates a new wrapper object for constructing a transaction.
<code>connection</code> to keep all of the transactions on the correct connection.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="kd">var</span><spanclass="nx">Transaction</span><spanclass="o">=</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">instance</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="nx">Transaction</span><spanclass="p">.</span><spanclass="nx">prototype</span><spanclass="o">=</span><spanclass="p">{</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Passed a <code>container</code> function, this method runs the current
transaction, returning a promise.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">run</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">container</span><spanclass="p">,</span><spanclass="nx">connection</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="nx">getContainerObject</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">connection</span><spanclass="p">)</span><spanclass="p">{</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>The client we need to call <code>finishTransaction</code> on.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="kd">var</span><spanclass="nx">client</span><spanclass="o">=</span><spanclass="k">this</span><spanclass="p">.</span><spanclass="nx">client</span><spanclass="p">;</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>The object passed around inside the transaction container.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="kd">var</span><spanclass="nx">containerObj</span><spanclass="o">=</span><spanclass="p">{</span>
<spanclass="p">};</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Ensure the transacting object methods are bound with the correct context.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">_</span><spanclass="p">.</span><spanclass="nx">bindAll</span><spanclass="p">(</span><spanclass="nx">containerObj</span><spanclass="p">,</span><spanclass="s1">'commit'</span><spanclass="p">,</span><spanclass="s1">'rollback'</span><spanclass="p">);</span>
<spanclass="k">return</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">containerObj</span><spanclass="p">)</span><spanclass="p">{</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Initiate a deferred object, so we know when the
transaction completes or fails, we know what to do.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="kd">var</span><spanclass="nx">dfd</span><spanclass="o">=</span><spanclass="nx">containerObj</span><spanclass="p">.</span><spanclass="nx">dfd</span><spanclass="o">=</span><spanclass="nx">Promise</span><spanclass="p">.</span><spanclass="nx">pending</span><spanclass="p">();</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Call the container with the transaction
commit & rollback objects.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">container</span><spanclass="p">(</span><spanclass="nx">containerObj</span><spanclass="p">);</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Return the promise for the entire transaction.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="k">return</span><spanclass="nx">dfd</span><spanclass="p">.</span><spanclass="nx">promise</span><spanclass="p">;</span>