SerialPort: close() method
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
Secure context: This feature is available only in secure contexts (HTTPS), in some or all supporting browsers.
Experimental: This is an experimental technology
Check the Browser compatibility table carefully before using this in production.
Note: This feature is available in Dedicated Web Workers.
The SerialPort.close()
method of the SerialPort
interface returns a Promise
that resolves when the port closes.
Description
close()
closes the serial port if previously-locked SerialPort.readable
and SerialPort.writable
members are unlocked, meaning the releaseLock()
methods have been called for their respective reader and writer.
However, when continuously reading data from a serial device using a loop, the associated readable stream will always be locked until the reader encounters an error. In this case, calling reader.cancel()
will force reader.read()
to resolve immediately with { value: undefined, done: true }
allowing the loop to call reader.releaseLock()
.
// Without transform streams.
let keepReading = true;
let reader;
async function readUntilClosed() {
while (port.readable && keepReading) {
reader = port.readable.getReader();
try {
while (true) {
const { value, done } = await reader.read();
if (done) {
// reader.cancel() has been called.
break;
}
// value is a Uint8Array.
console.log(value);
}
} catch (error) {
// Handle error...
} finally {
// Allow the serial port to be closed later.
reader.releaseLock();
}
}
await port.close();
}
const closedPromise = readUntilClosed();
document.querySelector("button").addEventListener("click", async () => {
// User clicked a button to close the serial port.
keepReading = false;
// Force reader.read() to resolve immediately and subsequently
// call reader.releaseLock() in the loop example above.
reader.cancel();
await closedPromise;
});
Closing a serial port is more complicated when using transform streams. See Close a serial port for guidance.
Syntax
close()
Parameters
None.
Return value
A Promise
.
Specifications
Specification |
---|
Web Serial API # dom-serialport-close |
Browser compatibility
BCD tables only load in the browser