RTCDataChannel: readyState property
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since January 2020.
The read-onlyRTCDataChannel propertyreadyState returns a string which indicates the state of the data channel's underlying data connection.
In this article
Values
A string indicating the current state of the underlying data transport, which is one of the following values:
connectingThe user agent (browser) is in the process of creating the underlying data transport;this is the state of a new
RTCDataChannelafter being created byRTCPeerConnection.createDataChannel(),on the peer which started the connection process.openThe underlying data transport has been establishedand data can be transferred bidirectionally across it.This is the default state of a new
RTCDataChannelcreated by the WebRTC layerwhen the remote peer created the channeland delivered it to the site or appin adatachannelevent.closingThe process of closing the underlying data transport has begun.It is no longer possible to queue new messages to be sent,but previously queued messages may still be send or receivedbefore entering the
closedstate.closedThe underlying data transport has closed,or the attempt to make the connection failed.
Example
const dataChannel = peerConnection.createDataChannel("File Transfer");const sendQueue = [];function sendMessage(msg) { switch (dataChannel.readyState) { case "connecting": console.log(`Connection not open; queueing: ${msg}`); sendQueue.push(msg); break; case "open": sendQueue.forEach((msg) => dataChannel.send(msg)); break; case "closing": console.log(`Attempted to send message while closing: ${msg}`); break; case "closed": console.log("Error! Attempt to send while connection closed."); break; }}Specifications
| Specification |
|---|
| WebRTC: Real-Time Communication in Browsers> # dom-datachannel-readystate> |