Пытаясь объединить код и сделать функции более общими, я столкнулся с областью неопределенности в отношении транзакций indexedDB.
Скажите, пожалуйста, является ли плохой практикой размещение запросов в условных блоках, как в приведенном ниже примере кода? В плохой терминологии мне интересно, узнает ли браузер, какие запросы составляют транзакцию при каждом вызове функции, поскольку они будут различаться. По крайней мере одна часть одного из блоков if будет истинной для каждого вызова, а иногда и более одного.
Спасибо.
function func( callBack ) {
let T = DB_open.base.transaction( ['notes'], 'readwrite' ),
n = T.objectStore( 'notes' ),
k = IDBKeyRange.bound( [ selKey, 0 ], [ selKey + 1, 0 ], false, true ),
req;
T.oncomplete = (e) => { if ( callBack ) callBack(); };
T.onerror = (e) => { e.stopPropagation(); };
try {
/* Preparatory code */
if ( condition_1 ) {
n.openCursor( k ).onsuccess = ( e ) => {
let v, cursor = e.target.result;
if ( cursor ) {
v = cursor.value;
if ( condition_2 ) {
/* A few lines of non-database code */
cursor.update( v );
}; // end if
cursor.continue();
}; // end if cursor
}; // close cursor onsuccess
}
else {
req = n.get( [ a, b ] );
req.onsuccess = function()
{
/* A few lines of code */
n.put( r );
}; // close req_c
}; // end if
if ( callBack ) {
/* A few lines of non-database code */
n.put ( { 'key' : [0,0], .... } );
n.add ( { 'key' : [selKey, 0], ... } );
}; // end if
} // close try
catch { T.abort(); }
} // close func