> Fetch clean Markdown by appending `.md` to any page URL under https://signalwire.com/docs or requesting it with the HTTP header `Accept: text/markdown`. The root index at https://signalwire.com/docs/llms.txt lists the available documentation indexes.

# CallNotReadyError

> Thrown when a call RPC is attempted before the self member context has arrived.

Every member RPC is addressed with the local leg's `{ node_id, call_id, member_id }` triple, and the server delivers `selfId`/`nodeId` only on `call.joined`. Until then there is nothing to route with, so the SDK fails fast instead of sending a doomed request.

Wait for [`selfId$`](/docs/browser-sdk/v4/reference/webrtc-call/self-id\$) — or for [`self$`](/docs/browser-sdk/v4/reference/webrtc-call/self\$), which withholds emission until self exists — before issuing call control.

## **Extends**

* `Error`

## **Constructors**

### Constructor

```ts
new CallNotReadyError(callId, options?): CallNotReadyError
```

### Parameters

**`callId`** `string` — required

ID of the call that has no self member context yet.

---

**`options`** `ErrorOptions`

Standard `ErrorOptions`, e.g. `{ cause }`.

---

## **Properties**

**`callId`** `string` — required

ID of the call that has no self member context yet.

---

## **Examples**

```ts
import { CallNotReadyError } from '@signalwire/js';
import { firstValueFrom } from 'rxjs';

try {
  await call.toggleLock();
} catch (error) {
  if (error instanceof CallNotReadyError) {
    await firstValueFrom(call.self$);
    await call.toggleLock();
  }
}
```

## **See**

* [`ParticipantNotReadyError`](/docs/browser-sdk/v4/reference/errors/participant-not-ready-error) — the same readiness gate for a remote member.
* [`executeMethod`](/docs/browser-sdk/v4/reference/webrtc-call/execute-method).