IDBIndex.getKey()
=================

La méthode **`getKey()`**, rattachée à l'interface `IDBIndex`, renvoie un objet `IDBRequest` et, dans un *thread* séparé, récupère la clé associée ou la clé primaire si l'argument passé à la fonction est un intervalle `IDBKeyRange`.

Si la méthode trouve une clé, ce sera alors la propriété `result` de la requête renvoyée. Seule la clé primaire de l'enregistrement est renvoyée (pour obtenir l'ensemble de l'enregistrement, on utilisera `IDBIndex.get`).

**Note:** Cette fonctionnalité est disponible via les Web Workers

Syntaxe
-------


```js
var myIndex = objectStore.index("index");
var request = myIndex.getKey(key);
```

### Paramètres

`key` Facultatif

Une clé ou un intervalle `IDBKeyRange` qui identifie l'enregistrement dont on souhaite obtenir la clé. Si la valeur vaut `null` ou si elle est absente, le navigateur utilisera un intervalle de clé sans limite.

### Valeur de retour

Un objet `IDBRequest` qui recevra les différents évènements relatifs à l'opération qui est déclenchée.

### Exceptions

Cette méthode peut déclencher une exception. Celle-ci peut avoir l'un des types suivants :

| Exception | Description |
| --- | --- |
| TransactionInactiveError | La transaction rattachée à cet `IDBIndex` est inactive. |
| `DataError` | 
 La clé ou l'intervalle de clés qui est fourni contient une clé
 invalide.
  |
| `InvalidStateError` | L'index a été supprimé ou déplacé. |

Exemples
--------

Dans l'exemple qui suit, on ouvre une transaction et un magasin d'objets. Ensuite on récupère l'index `lName` sur cette base de donnée. On ouvre alors un curseur sur l'index grâce à la méthode `IDBIndex.openCursor` (cela fonctionne de la même façon que `IDBObjectStore.openCursor` sauf que les enregistrements sont triés selon l'index et pas selon la clé primaire).

`myIndex.getKey('Bungle')` est ensuite utilisé afin d'obtenir la clé primaire de l'enregistrement pour lequel `lName` vaut `Bungle`. Le résultat de cette requête est imprimé dans la console lorsque la fonction de rappel (*callback*) de succès est déclenché.

Enfin, on parcourt les enregistrements pour remplir un tableau HTML. Le dépôt `indexeddb-examples` contient un exemple complet (voir l'exemple en direct).


```js
function displayDataByIndex() {
  tableEntry.innerHTML = "";
  var transaction = db.transaction(["contactsList"], "readonly");
  var objectStore = transaction.objectStore("contactsList");
  var myIndex = objectStore.index("lName");
  var getKeyRequest = myIndex.getKey("Bungle");
  getKeyRequest.onsuccess = function () {
    console.log(getKeyRequest.result);
  };

  myIndex.openCursor().onsuccess = function (event) {
    var cursor = event.target.result;
    if (cursor) {
      var tableRow = document.createElement("tr");
      tableRow.innerHTML =
        "<td>" +
        cursor.value.id +
        "</td>" +
        "<td>" +
        cursor.value.lName +
        "</td>" +
        "<td>" +
        cursor.value.fName +
        "</td>" +
        "<td>" +
        cursor.value.jTitle +
        "</td>" +
        "<td>" +
        cursor.value.company +
        "</td>" +
        "<td>" +
        cursor.value.eMail +
        "</td>" +
        "<td>" +
        cursor.value.phone +
        "</td>" +
        "<td>" +
        cursor.value.age +
        "</td>";
      tableEntry.appendChild(tableRow);

      cursor.continue();
    } else {
      console.log("Les éléments sont affichés.");
    }
  };
}
```

Spécifications
--------------

| Specification |
| --- |
| Indexed Database API 3.0 # ref-for-dom-idbindex-getkey① |

Compatibilité des navigateurs
-----------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Voir aussi
----------

* Utiliser IndexedDB
* Initier une connexion : `IDBDatabase`
* Utiliser les transactions : `IDBTransaction`
* Définir un intervalle de clés : `IDBKeyRange`
* Récupérer et modifier les données : `IDBObjectStore`
* Utiliser les curseurs `IDBCursor`
* L'exemple de référence : notifications de trucs à faire (voir la démonstration)