ReadableStreamReader.js [plain text]
function cancel(reason)
{
"use strict";
if (!@isReadableStreamReader(this))
return @Promise.@reject(new @TypeError("Function should be called on a ReadableStreamReader"));
if (!this.@ownerReadableStream)
return @Promise.@reject(new @TypeError("cancel() called on a reader owned by no readable stream"));
return @cancelReadableStream(this.@ownerReadableStream, reason);
}
function read()
{
"use strict";
if (!@isReadableStreamReader(this))
return @Promise.@reject(new @TypeError("Function should be called on a ReadableStreamReader"));
if (!this.@ownerReadableStream)
return @Promise.@reject(new @TypeError("read() called on a reader owned by no readable stream"));
return @readFromReadableStreamReader(this);
}
function releaseLock()
{
"use strict";
if (!@isReadableStreamReader(this))
throw new @TypeError("Function should be called on a ReadableStreamReader");
const stream = this.@ownerReadableStream;
if (!stream)
return;
if (this.@readRequests.length)
throw new @TypeError("There are still pending read requests, cannot release the lock");
if (stream.@state === @streamReadable)
this.@closedPromiseCapability.@reject.@call(@undefined, new @TypeError("releasing lock of reader whose stream is still in readable state"));
else
this.@closedPromiseCapability = { @promise: @Promise.@reject(new @TypeError("reader released lock")) };
stream.@reader = @undefined;
this.@ownerReadableStream = null;
}
function closed()
{
"use strict";
if (!@isReadableStreamReader(this))
return @Promise.@reject(new @TypeError("Callee of closed is not a ReadableStreamReader"));
return this.@closedPromiseCapability.@promise;
}