mirror of
https://github.com/knex/knex.git
synced 2025-08-01 13:22:04 +00:00
44 lines
8.4 KiB
HTML
44 lines
8.4 KiB
HTML
<!DOCTYPE html><html lang="en"><head><title>lib/transaction</title></head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0"><meta name="groc-relative-root" content="../"><meta name="groc-document-path" content="lib/transaction"><meta name="groc-project-path" content="lib/transaction.js"><link rel="stylesheet" type="text/css" media="all" href="../assets/style.css"><script type="text/javascript" src="../assets/behavior.js"></script><body><div id="meta"><div class="file-path">lib/transaction.js</div></div><div id="document"><div class="segment"><div class="comments"><div class="wrapper"><h2 id="transaction">Transaction</h2></div></div></div><div class="segment"><div class="code"><div class="wrapper"><span class="kd">var</span> <span class="nx">Promise</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'./promise'</span><span class="p">).</span><span class="nx">Promise</span><span class="p">;</span>
|
|
<span class="kd">var</span> <span class="nx">_</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'lodash'</span><span class="p">);</span></div></div></div><div class="segment"><div class="comments"><div class="wrapper"><p>Creates a new wrapper object for constructing a transaction.
|
|
Called by the <code>knex.transaction</code>, which sets the correct client
|
|
and handles the <code>container</code> object, passing along the correct
|
|
<code>connection</code> to keep all of the transactions on the correct connection.</p></div></div><div class="code"><div class="wrapper"><span class="kd">var</span> <span class="nx">Transaction</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">instance</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="k">this</span><span class="p">.</span><span class="nx">client</span> <span class="o">=</span> <span class="nx">instance</span><span class="p">.</span><span class="nx">client</span><span class="p">;</span>
|
|
<span class="p">};</span>
|
|
|
|
<span class="nx">Transaction</span><span class="p">.</span><span class="nx">prototype</span> <span class="o">=</span> <span class="p">{</span></div></div></div><div class="segment"><div class="comments"><div class="wrapper"><p>Passed a <code>container</code> function, this method runs the current
|
|
transaction, returning a promise.</p></div></div><div class="code"><div class="wrapper"> <span class="nx">run</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">container</span><span class="p">,</span> <span class="nx">connection</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="k">return</span> <span class="k">this</span><span class="p">.</span><span class="nx">client</span><span class="p">.</span><span class="nx">startTransaction</span><span class="p">(</span><span class="nx">connection</span><span class="p">)</span>
|
|
<span class="p">.</span><span class="nx">bind</span><span class="p">(</span><span class="k">this</span><span class="p">)</span>
|
|
<span class="p">.</span><span class="nx">then</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">getContainerObject</span><span class="p">)</span>
|
|
<span class="p">.</span><span class="nx">then</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">initiateDeferred</span><span class="p">(</span><span class="nx">container</span><span class="p">))</span>
|
|
<span class="p">.</span><span class="nx">bind</span><span class="p">();</span>
|
|
<span class="p">},</span>
|
|
|
|
<span class="nx">getContainerObject</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">connection</span><span class="p">)</span> <span class="p">{</span></div></div></div><div class="segment"><div class="comments"><div class="wrapper"><p>The client we need to call <code>finishTransaction</code> on.</p></div></div><div class="code"><div class="wrapper"> <span class="kd">var</span> <span class="nx">client</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">client</span><span class="p">;</span></div></div></div><div class="segment"><div class="comments"><div class="wrapper"><p>The object passed around inside the transaction container.</p></div></div><div class="code"><div class="wrapper"> <span class="kd">var</span> <span class="nx">containerObj</span> <span class="o">=</span> <span class="p">{</span>
|
|
|
|
<span class="nx">commit</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">message</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="nx">client</span><span class="p">.</span><span class="nx">finishTransaction</span><span class="p">(</span><span class="s1">'commit'</span><span class="p">,</span> <span class="k">this</span><span class="p">,</span> <span class="nx">message</span><span class="p">);</span>
|
|
<span class="p">},</span>
|
|
|
|
<span class="nx">rollback</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">error</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="nx">client</span><span class="p">.</span><span class="nx">finishTransaction</span><span class="p">(</span><span class="s1">'rollback'</span><span class="p">,</span> <span class="k">this</span><span class="p">,</span> <span class="nx">error</span><span class="p">);</span>
|
|
<span class="p">},</span></div></div></div><div class="segment"><div class="comments"><div class="wrapper"><p>"rollback to"?</p></div></div><div class="code"><div class="wrapper"> <span class="nx">connection</span><span class="o">:</span> <span class="nx">connection</span>
|
|
<span class="p">};</span></div></div></div><div class="segment"><div class="comments"><div class="wrapper"><p>Ensure the transacting object methods are bound with the correct context.</p></div></div><div class="code"><div class="wrapper"> <span class="nx">_</span><span class="p">.</span><span class="nx">bindAll</span><span class="p">(</span><span class="nx">containerObj</span><span class="p">,</span> <span class="s1">'commit'</span><span class="p">,</span> <span class="s1">'rollback'</span><span class="p">);</span>
|
|
|
|
<span class="k">return</span> <span class="nx">containerObj</span><span class="p">;</span>
|
|
<span class="p">},</span>
|
|
|
|
<span class="nx">initiateDeferred</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">container</span><span class="p">)</span> <span class="p">{</span>
|
|
|
|
<span class="k">return</span> <span class="kd">function</span><span class="p">(</span><span class="nx">containerObj</span><span class="p">)</span> <span class="p">{</span></div></div></div><div class="segment"><div class="comments"><div class="wrapper"><p>Initiate a deferred object, so we know when the
|
|
transaction completes or fails, we know what to do.</p></div></div><div class="code"><div class="wrapper"> <span class="kd">var</span> <span class="nx">dfd</span> <span class="o">=</span> <span class="nx">containerObj</span><span class="p">.</span><span class="nx">dfd</span> <span class="o">=</span> <span class="nx">Promise</span><span class="p">.</span><span class="nx">pending</span><span class="p">();</span></div></div></div><div class="segment"><div class="comments"><div class="wrapper"><p>Call the container with the transaction
|
|
commit & rollback objects.</p></div></div><div class="code"><div class="wrapper"> <span class="nx">container</span><span class="p">(</span><span class="nx">containerObj</span><span class="p">);</span></div></div></div><div class="segment"><div class="comments"><div class="wrapper"><p>Return the promise for the entire transaction.</p></div></div><div class="code"><div class="wrapper"> <span class="k">return</span> <span class="nx">dfd</span><span class="p">.</span><span class="nx">promise</span><span class="p">;</span>
|
|
|
|
<span class="p">};</span>
|
|
|
|
<span class="p">}</span>
|
|
|
|
<span class="p">};</span>
|
|
|
|
<span class="nx">exports</span><span class="p">.</span><span class="nx">Transaction</span> <span class="o">=</span> <span class="nx">Transaction</span><span class="p">;</span></div></div></div></div></body></html> |