# getItem(key)

### **Arguments**

1. `key` *(string)*: Key to get an item by.

### **Lifecycle**

1. **preGetItem**

   **Event name:** `preGetItem`\
   **Properties passed:**

   * `cacheInstance` reference to cache instance (`this`)
   * `key` key passed to `getItem` method

   **Returns:** *(object)*: object containing properties:

   * `cacheInstance` reference to cache instance (`this`)
   * `key` key passed through handlers added for `preGetItem` event<br>
2. **postGetItem**

   **Event name:** `postGetItem`\
   **Properties passed:**

   * `cacheInstance` reference to cache instance (`this`) returned by `preGetItem`
   * `key` key returned by `preGetItem`
   * `item` item returned by adapter using its [getItem](https://stash-it.gitbook.io/stash-it/api/adapter/getitem-key) method

   **Returns:** *(object)*: object containing properties:

   * `cacheInstance` reference to cache instance (`this`)
   * `key` key passed through handlers added for `postGetItem` event
   * `item` item passed through handlers added for `postGetItem` event<br>

   Eventually `getItem` returns item returned by `postGetItem`.

{% hint style="info" %}
Even though `getItem` uses `buildKey` internally that build key is not passed in `postGetItem` event handler's object's properties. If key is somehow changed (with some plugin) during `preBuildKey` or `postGetKey` events, that key is not passed further in `getItem`. If you need access to built key, you can still obtain it from returned item to which you have access in `postGetItem`.
{% endhint %}

{% hint style="info" %}
Make sure that `item` exists when writing plugins, always. When `item` is passed to event handler for this event, it might not be an actual item, but `undefined`. Why? Some plugin before one you will use to operate on this item, might have already removed it. How? Here's an example:

* you have a ttl plugin that will automatically remove an item once it's lifetime is over,
* you have another plugin that does something with item's data,
* order of executing plugins matter, therefore when first plugin will remove that item and pass `undefined` further down, every next plugin will operate on that undefined value. So do not try to access `value` or anything from that item, your app will crash.
  {% endhint %}

### **Returns**

*(*[*Item*](https://stash-it.gitbook.io/stash-it/basic-structure#item)*)*: Item, an object.

*(undefined)*: If item is not found, returns `undefined`.

### **Example**

```javascript
// assuming that you already have cache instance prepared
cache.getItem('key'); // Item
cache.getItem('keyForItemThatDoesNotExist'); // undefined
```
