Bonjour,
Je m’initie à IndexedDB :
Mozilla Firefox 68.2.0esr
J’aimerais séparer le code d’affichage du résultat d’une requête sur la db (ex : fonctions insérant des balises HTML avec la valeur du résultat d’une requête) et le code gérant ’accès à la base de données, de préférence dans des fichiers.js séparés.
Mais je ne parviens pas à écrire un code propre et structuré accédant à la db et retournant un tableau contenant le résultat.
Comme le code de la requête est toujours dans une fonction anonyme déclenché par l’évènement ".onsuccess", elle ne peut rien retourner.
En sortie de la fonction anonyme déclenchée par ".onsuccess", le tableau est vide, voici leVoici les log :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 function recupererToutesLesNotes(db) { var tablDeNotes = []; let dbReq = getObjRequ(db); dbReq.onsuccess = function(event) { let curseur = event.target.result; if (curseur != null) { tablDeNotes.push(curseur.value); console.log("Note récupérée : " + curseur.value.text); curseur.continue(); } else { console.log("TablDeNotes dans onsuccess: " + tablDeNotes.length); // Si pas de meilleur solution, appeler ici la fct daffichage } }; dbReq.onerror = function(event) { console.log("Erreur dans la fct " + event.target.errorCode); }; // Ici je voudrais retourner tablDeNotes, mais il est vide console.log("TablDeNotes hors onsuccess: " + tablDeNotes.length); }
Je suppose que la solution tutorielle présentée sur MDN est à des fins pédagogiques et n’est pas destinée à être utilisée tel quel, vu qu’elle mélange le code d’itération sur le curseur de la db et le code manipulant la page HTML (ce que je cherche à éviter).C'est connecté testArray.js:21:11
TablDeNotes hors onsuccess: 0 testArray.js:49:11
Note récupérée : note 1 testArray.js:39:15
Note récupérée : Une note testArray.js:39:15
TablDeNotes dans onsuccess: 2 testArray.js:42:15
Une autre solution trouvée sur le net, serait d’appeler la fonction d’affichage (manipulant les balise html de la page web) dans la fct anonyme (Ligne 12 du premier code) et lui passer le tableau de résultat…
Mais il y a encore une imbrication ne permettant pas une nette séparation (HTML/fonction de la db).
Appel de la fct recupererToutesLesNotes(db):
Merci d'avance pour votre aide.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 // Déclaration des variables let db; let dbDelete = false; // Création de 'maBaseDeDonnes' let dbRequest = indexedDB.open("maBaseDeDonnees"); dbRequest.onsuccess = function(event) { db = event.target.result; console.log("C'est connecté"); recupererToutesLesNotes(db); };
--
Benoit
Ps.
Si la formulation de ma question repose sur compréhension erronée du JavaScript, merci d’avance de m’éclairer.
Partager