IDBIndex.count()
================

La méthode **`count()`**, rattachée à l'interface `IDBIndex`, renvoie un objet `IDBRequest` et, dans un *thread* séparé, renvoie le nombre d'enregistrements contenu dans un intervalle de clé.

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

Syntaxe
-------


```js
var request = monIndex.count();
var request = monIndex.count(cle);
```

### Paramètres

`cle` Facultatif

La clé ou l'intervalle de clé qui définit les enregistrements qu'on souhaite compter.

### Valeur de retour

Un objet `IDBRequest` sur lequel seront déclenchés les différents évènements relatifs à l'opération.

### Exceptions

Cette méthode peut déclencher différents types d'exceptions :

| Exception | Description |
| --- | --- |
| `TransactionInactiveError` | La transaction associée à cet index est inactive. |
| `DataError` | La clé ou l'intervalle de clé fourni possède une clé invalide. |
| `InvalidStateError` | L'index a été supprimé ou retiré. |

Exemples
--------

Dans l'exemple qui suit, on ouvre une transaction et un magasin d'objets puis on récupère l'index `lName` depuis une base de données de contacts. Ensuite, on ouvre un curseur simple sur cet index grâce à la méthode `IDBIndex.openCursor` (ce qui fonctionne comme si on ouvrait un curseur sur le magasin d'objets avec `IDBObjectStore.openCursor` sauf que les enregistrements sont ici triés selon l'index plutôt que selon la clé primaire).

`myIndex.count()` est alors utilisé afin de compter le nombre d'enregistrements dans l'index et le résultat de la requête est affiché dans la console au travers du gestionnaire d'évènements pour la réussite (`onsuccess`).

Enfin, on parcourt chaque enregistrement pour l'insérer dans un tableau HTML. Pour consulter un exemple fonctionnel complet, vous pouvez vous référer à notre dépôt IDBIndex-example (cf. la démonstration *live*).


```js
function displayDataByIndex() {
  tableEntry.innerHTML = "";
  var transaction = db.transaction(["contactsList"], "readonly");
  var objectStore = transaction.objectStore("contactsList");

  var myIndex = objectStore.index("lName");
  var countRequest = myIndex.count();
  countRequest.onsuccess = function () {
    console.log(countRequest.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("Éléments affichés.");
    }
  };
}
```

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

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

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

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

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

* Manipuler IndexedDB
* Démarrer des transactions : `IDBDatabase`
* Manipuler des transactions : `IDBTransaction`
* Définir un intervalle de clés : `IDBKeyRange`
* Récupérer des données et les modifier : `IDBObjectStore`
* Manipuler des curseurs : `IDBCursor`
* Exemple de référence pour IndexedDB : To-do Notifications