startTransaction
The startTransaction
method allows you to explicitly start a transaction that will make multiple mutations to the Store
, buffering all calls to the relevant listeners until it completes when you call the finishTransaction
method.
startTransaction(): this
returns | this | A reference to the |
---|
Transactions are useful for making bulk changes to the data in a Store
, and when you don't want listeners to be called as you make each change. Changes
are made silently during the transaction, and listeners relevant to the changes you have made will instead only be called when the whole transaction is complete.
Generally it is preferable to use the transaction
method to wrap a block of code as a transaction. It simply calls both the startTransaction and finishTransaction
methods for you. See that method for several transaction examples.
Use this startTransaction
method when you have a more 'open-ended' transaction, such as one containing mutations triggered from other events that are asynchronous or not occurring inline to your code. You must remember to also call the finishTransaction
method explicitly when it is done, of course.
Example
This example makes changes to two Cells, first outside, and secondly within, a transaction that is explicitly started and finished. In the second case, the Row
listener is only called once.
import {createStore} from 'tinybase';
const store = createStore().setTables({pets: {fido: {species: 'dog'}}});
store.addRowListener('pets', 'fido', () => console.log('Fido changed'));
store
.setCell('pets', 'fido', 'color', 'brown')
.setCell('pets', 'fido', 'sold', false);
// -> 'Fido changed'
// -> 'Fido changed'
store
.startTransaction()
.setCell('pets', 'fido', 'color', 'walnut')
.setCell('pets', 'fido', 'sold', true)
.finishTransaction();
// -> 'Fido changed'
Since
v1.3.0