2016-07-29 1 views
0

J'obtiens cette erreur lors de l'exécution d'une transaction dans Dexie:Dexie: SubTransactionError

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

cela se produit seulement après que je lance ce code:

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

et la fonction DeleteApiToken ressemble à ceci.

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

      }) 
     } 

La fonction Render provoque alors l'application de réengendrer et plus de transactions sont exécutées, mais ils ont tous jeter l'erreur a été mentionné précédemment. Si le DeleteApiToken n'est pas appelé, ils ne le sont pas.

Si vous pouvez voir une erreur avec mon code, ce serait super, sinon une simple explication de la raison pour laquelle le SubTransactionError peut être lancé serait suffisante. Merci!

Répondre

2

Il semble peu probable que ce code seul cause l'erreur. L'erreur indique qu'il y a une table nommée sous-titre. C'est ça? Sinon, je suppose que vous avez involontairement changé la propriété 'name' de la table DB.MySelf en pour souligner.

Une autre question est de savoir si DB est utilisé dans d'autres fonctions telles que CacheController.Invalidate()? Comment le code regarde-t-il si c'est le cas?

Explication de l'erreur: SubTransactionError ne peut se produire que lorsqu'une transaction est démarrée à partir d'une transaction en cours et que la nouvelle transaction tente d'inclure une table qui n'était pas incluse dans la transaction en cours. Exemple:

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

Je mets un trait de soulignement comme espace réservé pour n'importe quelle table. C'est parce qu'il le fait avec beaucoup. Quoi qu'il en soit, d'après votre explication, je devine que l'une des transactons n'est pas terminée avant que la suivante ne soit commencée. Je vais devoir regarder dans ce –