# Composite Disposable

Source: https://developers.inkdrop.app/event-subscription/composite-disposable

An object that aggregates multiple [Disposable][disposable] instances together into a single disposable, so they can all be disposed as a group.

These are very useful when subscribing to multiple events.

```js
import { CompositeDisposable } from 'event-kit'

class Something {
  constructor() {
    this.disposables = new CompositeDisposable();
    const db = env.localDB;

    this.disposables.add(db.onChange(() => {}));
    this.disposables.add(db.onNoteChange(() => {}));
  }

  destroy() {
    this.disposables.dispose();
  }
}
```

---

## Construction `constructor()`

Construct an instance, optionally with one or more disposables.

```js
const subscriptions = new CompositeDisposable();
```

---

## Destruction `dispose()`

Dispose all disposables added to this composite disposable.
If this object has already been disposed, this method has no effect.

```js
const subscriptions = new CompositeDisposable();

// Later, dispose all
subscriptions.dispose();
```

---

## Add multiple Disposables `add(...disposables)`

Add disposables to be disposed when the composite is disposed.
If this object has already been disposed, this method has no effect.

### Parameters

- **disposables** (DisposableLike\[], required)

  [Disposable][disposable] instances or any objects with `.dispose()`

```js
const subscriptions = new CompositeDisposable()

const db = env.localDB;
subscriptions.add(db.onChange(() => {}));
subscriptions.add(db.onNoteChange(() => {}));
```

---

## Remove a Disposable `remove(disposable)`

Remove a previously added disposable.

### Parameters

- **disposable** (DisposableLike, required)

  [Disposable][disposable] instances or any objects with `.dispose()`

```js
const subscriptions = new CompositeDisposable()

const db = env.localDB;
const disposable = db.onNoteChange(() => {});
subscriptions.add(disposable);

// Later, remove the disposable
subscriptions.remove(disposable);
```

---

## Clear all disposables `clear()`

Clear all disposables. They will not be disposed by the next call to dispose.

```js
const subscriptions = new CompositeDisposable()

// ...

subscriptions.clear();
```

[disposable]: https://developers.inkdrop.app/event-subscription/disposable
