将indexedDB请求放在包装在同一事务中的条件语句中是否不好?

时间:2019-05-16 07:03:36

标签: javascript indexeddb

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

0 个答案:

没有答案