在尝试合并代码并使功能更通用时,我遇到了有关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