Является ли плохой практикой помещать запросы indexedDB в условные операторы, заключенные в одну транзакцию? - PullRequest
0 голосов
/ 16 мая 2019

Пытаясь объединить код и сделать функции более общими, я столкнулся с областью неопределенности в отношении транзакций 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
...