2016-07-29 15 views
0

Ich erhalte diese Störung, wenn eine Transaktion in Dexie ausgeführt wird:Dexie: SubTransactionError

name: SubTransactionError message: table _ not included in parent transaction 

dies geschieht erst, nachdem ich diesen Code ausführen:

DeleteApiToken.then (() => { 
      CacheController.Invalidate(); 
      DataControllerCreator.Blocked++; 
      Render(); 
     }); 
     Api.Call(this.ApiCall,this.Data,() => {DataControllerCreator.Blocked--;},{ResetCacheState: this.ResetCacheState}); 
    }; 

und die DeleteApiToken Funktion sieht wie folgt aus.

function DeleteApiToken() { 
      return DB.transaction('rw', DB.MySelf,() => { 
       DB.MySelf.delete('ApiToken'); 
      }).catch(function (E) { 
       console.log(E); 
       return false; 

      }) 
     } 

Die Render-Funktion bewirkt dann, dass die App neu machen und mehr Transaktionen laufen, aber sie alle die zuvor erwähnten Fehler werfen. Wenn der DeleteApiToken nicht aufgerufen wird, tun sie dies nicht.

Wenn Sie einen Fehler mit meinem Code sehen können, der groß wäre, würde sonst nur eine einfache Erklärung, warum der SubTransactionError geworfen werden kann, ausreichen. Vielen Dank!

Antwort

2

Es scheint unwahrscheinlich, dass dieser Code allein den Fehler verursachen würde. Der Fehler weist darauf hin, dass eine Tabelle mit dem Namen Unterstrich vorhanden ist. So ist es? Wenn nicht, würde ich vermuten, dass Sie versehentlich die Eigenschaft 'name' der Tabelle DB.MySelf in Unterstrich geändert haben.

Eine weitere Frage ist, ob DB in anderen Funktionen wie CacheController.Invalidate() verwendet wird? Wie sieht der Code dort aus?

Erläuterung des Fehlers: SubTransactionError kann nur auftreten, wenn eine Transaktion innerhalb einer laufenden Transaktion gestartet wird und die neue Transaktion versucht, eine Tabelle aufzunehmen, die nicht in der laufenden Transaktion enthalten war. Beispiel:

db.transaction ('rw', 'friends',()=>{ 
    db.transaction ('rw', 'pets',()=>{ 
     // SubTransactionError: Table 'pets' not included in parent transaction. 
    }); 
}); 
+0

Ich setze Unterstreichung als Platzhalter für jede Tabelle. Das liegt daran, dass es bei vielen geschieht. Wie auch immer, von deiner Erklärung her vermute ich irgendwie, dass eines der Transactions nicht beendet wird, bevor das nächste gestartet wird. Ich muss mich darum kümmern –