Like ReadableChannel.read, but can be used with select
Reads a value from the channel. If there are no values, blocks until there is
If channel is buffered, takes next value from the buffer. This unblocks first of blocked WritableChannel.write calls if there are any
If channel is unbuffered, simply unblocks the first of blocked WritableChannel.write
If the channel is closed and has no values left in the buffer,
returns undefined
Concurrent calls are allowed - each read will get own value (no two reads will get the same value). If multiple calls are blocked, they will unblock one-by-one in unspecified order
Note: each blocked call occupies memory, and there is no limit on how many calls there can be at once. Typically, programs have a fixed or a finite number of reads, so this should not be a problem
Non-blocking version of ReadableChannel.read. Unlike
ReadableChannel.read, if channel has no values, returns undefined
This means undefined is returned in two cases: (1) the channel is open
but has no values, and the channel is closed and has no values. Use
ReadableChannel.closed to tell those apart
Blocks until the channel is "readable", meaning that it either:
Intuitively, a channel is "readable" when the next ReadableChannel.read call on it does not block (resolves immediately)
Specify a value to return once the wait unblocks
Optionalsignal: AbortSignalUse signal to cancel the wait. This frees up memory occupied by the wait. After cancelling, the wait will throw AbortedError
Returns true after WritableChannel.close was called on the channel.
See WritableChannel.close for the explanation of what are closed
channels
Returns the number of currently blocked ReadableChannel.waitUntilReadable calls
Channel that can be read from. Implements
AsyncIterable, hence can be used withfor awaitloop