Y a-t-il un moyen d'obtenir une seule rangée dans indexeddb? Je ne pouvais rien trouver pour cela. p>
5 Réponses :
sorte d'un piratage, mais je pense que si vous n'appelez pas continuer () sur l'objet de résultat, il ne traitera que le premier élément.
ci-dessous est un exemple rapide d'interrogation avec un curseur et uniquement en traitement d'une résultat. p>
Je l'ai fait exactement cela, et cela fonctionne pour le moment, mais lorsque vous essayez de fermer le complément du chrome (je devais l'utiliser dans le complément), l'ensemble du navigateur Chrome se bloque sur vous.
Chrome a eu quelques problèmes dans lesquels l'utilisation d'indexeddB plantinerait tout le navigateur. J'ai eu Soumis un défaut à l'équipe chromée et je crois Il a maintenant été corrigé (au moins dans la version DEV). Essayez votre code à nouveau dans la version Dev ou Canarie de Chrome ou dans Firefox, car il semble toujours fonctionner.
Vous pouvez utiliser transaction.Abort ()
Par exemple, si vous utilisez l'exemple de @ Shawn P>
var db = _IndexedDatabase; var trans = db.transaction(["Sites"], IDBTransaction.READ_ONLY); trans.onabort = function(event) { console.log(event); }; var store = trans.objectStore("Sites"); var request = store.openCursor(); request.onsuccess = function (ev) { var cursor = request.result || ev.target.result; if(!!cursor == false) return; console.log(cursor.value); try{ transaction.abort(); }catch(e){ console.log(e); } };
Puisque je ne pouvais pas trouver quoi que ce soit, c'est ce que j'ai eu mis en place maintenant et cela fonctionne bien pour mon but. C'est un hack et je ne suis pas content de ça, mais bon, pour l'instant, cela fera. P>
Je stocke simplement une ligne comme dont j'ai besoin dans cette base de données. Et sur la lecture, je reçois toutes les lignes et effectuez l'action dont j'ai besoin, ce qui n'est qu'une rangée. Lorsque j'insère une nouvelle ligne, je limite simplement toute la base de données, qui n'est à nouveau qu'une rangée et insérant une ligne fraîche dedans. P>
@spiderdevil, je viens de voir votre réponse et je ne suis pas sûr que je pourrai essayer d'abandonner la transaction, mais si cela fonctionne pour quelqu'un d'autre à coup sûr, veuillez le partager dans des commentaires. P>
Utiliser un curseur et ne pas appeler .Continue () n'est pas un piratage du tout. C'est la voie prévue. Sur les points principaux des curseurs est exactement qu'ils vous laissent chercher les informations dont vous avez besoin. P>
donc pas besoin d'appeler transaction.Abort () p>
Utilisez simplement la méthode Obtenir sur l'index. Cela retournera le premier enregistrement pour la clé donnée, seule la désavouture est que vous ne pouvez pas trier. P>