Mozilla's getting a new look. What do you think? https://mzl.la/brandsurvey

IDBTransaction.mode

Cet article nécessite une relecture technique. Voici comment vous pouvez aider.

Cet article nécessite une relecture rédactionnelle. Voici comment vous pouvez aider.

La propriété mode de l'interface IDBTransaction renvoie le mode d'accès aux magasins d'objets de la transaction et à la base de données. La valeur par défaut étant readonly.

Depuis Firefox 40, les transactions IndexedDB diminuent en efficacité pour gagner en efficience (voir bug 1112702.) Auparavant, dans une transaction en readwrite l'événement complete était déclanché seulement lorsque toutes les données étaient écrites sur le disque. Maintenant l'événement complete est déclenché après que l'OS ai envoyé l'ordre d'écrire les données, mais potentiellement avant qu'elles aient été écrites sur le disque. L'événement complete peut ainsi se déclancher plus rapidement qu'auparavant, cependant, il existe une chance infime pour que l'ensemble de la transaction soit perdue si le système d'exploitation plante ou s'il y a une perte de courant avant que les données aient été écites sur le disque. Étant donné que ces événements catastrophiques sont rares la plupart des utilisateurs ne devraient pas avoir à s'en préoccuper davantage.

Si vous devez vous assurer de l'efficacité d'une transaction pour une raison quelconque (par exemple, vous stockez des données critiques qui ne peuvent être recalculé plus tard), vous pouvez forcer l'enregistrement complet sur disque avant de déclencher l'événement complete en utilisant le mode readwriteflush (non standard) expérimentale ( voir IDBDatabase.transaction ). C'est expérimentale, et ne peut être utilisé que si le dom.indexedDB.experimental pref est réglé sur true dans about: config.

Note : This feature is available in Web Workers.

Syntaxe

var myCurrentMode = transaction.mode;

Valeur

Le mode d'accès aux magasins d'objets et à la base de données:

Valeur Explication
readonly permet de prendre des objets dans les magasins d'objets, de lire les index et de faire des curseurs.
readwrite Permet en plus de que l'on peut faire en readonly, d'ajouter et mettre à jour des objets dans les magasins d'objets.
versionchange Permet toute les opérations, y compris celles qui suppriment ou ajoutent des magasins d'objets ou des index. Ce mode met à jour le numéro de version de la base de données, il se sert au début de IDBDatabase.setVersion. Les transactions dans ce mode ne peuvent pas fonctionner en même temps que d'autres.
readwriteflush

Depuis Firefox 40, si vous devez vous assurer de l'efficacité d'une transaction pour une raison quelconque (par exemple, vous stockez des données critiques qui ne peuvent être recalculé plus tard), vous pouvez forcer l'enregistrement complet sur disque avant de déclencher l'événement complete en utilisant le mode readwriteflush (non standard) expérimentale ( voir IDBDatabase.transaction ). C'est expérimentale, et ne peut être utilisé que si le dom.indexedDB.experimental pref est réglé sur true dans about: config.

Exemple

Dans le code suivant, on ouvre une connexion à la base de donnée. Sur cette connexion on démarre une transaction en lecture/écriture pour accéder au magasin d'objet "toDoList" et y ajouter un enregistrement. Notez également les gestionnaires d'événements oncomplete et onerror de la transaction qui affiche sur la page le résultat de la transaction.

La propriété mode sert à la fin pour renvoyer le mode de la transaction .

//Connexion à la base de données
var DBOpenRequest = window.indexedDB.open("toDoList", 4);

DBOpenRequest.onsuccess = function(event) {
	note.innerHTML += '<li>Connexion établie.</li>'; 
  
	//Affecte la connexion à la variable db. 
	db = DBOpenRequest.result; 

	// Exécutez la fonction addData () pour emmagasiné les données dans la base
	addData(); 
};
function addData() { 
	// Un nouvel objet prêt à être emmagasiné
	newItem = [ { taskTitle: "Walk dog", hours: 19, minutes: 30, day: 24, month: "December", year: 2013, notified: "no" } ]; 
	
	// ouvre une transaction de lecture / écriture  prête au traitement des données sur la connexion
	var transaction = db.transaction(["toDoList"], "readwrite"); 
	
	// en cas de succès de l'ouverture de la transaction 
	transaction.oncomplete = function(event) { 
		note.innerHTML += '<li>Transaction complété : modification de la base de données terminée.</li>'; 
	}; 
	// en  cas d'échec de l'ouverture de la transaction 
	transaction.onerror = function(event) { 
		note.innerHTML += '<li>L\'erreur: "' + transaction.error +'" c\'est produite échec de la transaction.</li>';  
	}; 
	
	// ouvre l'accès au un magasin "toDoList" de la transaction
	var objectStore = transaction.objectStore("toDoList"); 
	
	// Ajoute un enregistrement
	var objectStoreRequest = objectStore.add(newItem[0]); 
	objectStoreRequest.onsuccess = function(event) { 
		// signale l'ajout de l'enregistrement
		note.innerHTML += '<li>Enregistrement ajouté.</li>'; 
	}; 

	// Renvoie le mode dans lequel la transaction a été ouverte ("readwrite" dans ce cas)
	transaction.mode;
};

Pour un exemple de travail complet, voir notre To-do Notifications app (view example live).

Spécification

Spécification Statut Commentaire
Indexed Database API
La définition de 'mode' dans cette spécification.
Recommendation  

Compatibilité avec les navigateurs

Fontionnalité Chrome Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
Support basique 23webkit
24
10 moz
16.0 (16.0)
10, en partie 15 7.1
Disponible dans workers (Oui) 37.0 (37.0) ? (Oui) ?
Fonctionnalité Android Firefox Mobile (Gecko) Firefox OS IE Phone Opera Mobile Safari Mobile
Support basique 4.4 22.0 (22.0) 1.0.1 10 22 8
Disponible dans workers (Oui) 37.0 (37.0) (Oui) ? (Oui) ?

Voir aussi

Étiquettes et contributeurs liés au document

 Contributeurs à cette page : gadgino
 Dernière mise à jour par : gadgino,