mirror of
https://github.com/denoland/deno.git
synced 2025-08-31 07:47:46 +00:00
feat: support abort reasons in Deno APIs and WebSocketStream
(#13066)
This commit is contained in:
parent
9ffc7edc23
commit
01a6b66034
9 changed files with 241 additions and 63 deletions
|
@ -7,7 +7,6 @@
|
|||
|
||||
((window) => {
|
||||
const core = window.Deno.core;
|
||||
const { DOMException } = window.__bootstrap.domException;
|
||||
const {
|
||||
Uint8Array,
|
||||
ArrayPrototypePush,
|
||||
|
@ -123,7 +122,8 @@
|
|||
async function readAllInner(r, options) {
|
||||
const buffers = [];
|
||||
const signal = options?.signal ?? null;
|
||||
while (!signal?.aborted) {
|
||||
while (true) {
|
||||
signal?.throwIfAborted();
|
||||
const buf = new Uint8Array(READ_PER_ITER);
|
||||
const read = await r.read(buf);
|
||||
if (typeof read == "number") {
|
||||
|
@ -132,9 +132,7 @@
|
|||
break;
|
||||
}
|
||||
}
|
||||
if (signal?.aborted) {
|
||||
throw new DOMException("The read operation was aborted.", "AbortError");
|
||||
}
|
||||
signal?.throwIfAborted();
|
||||
|
||||
return concatBuffers(buffers);
|
||||
}
|
||||
|
@ -200,7 +198,8 @@
|
|||
const buf = new Uint8Array(size + 1); // 1B to detect extended files
|
||||
let cursor = 0;
|
||||
const signal = options?.signal ?? null;
|
||||
while (!signal?.aborted && cursor < size) {
|
||||
while (cursor < size) {
|
||||
signal?.throwIfAborted();
|
||||
const sliceEnd = MathMin(size + 1, cursor + READ_PER_ITER);
|
||||
const slice = buf.subarray(cursor, sliceEnd);
|
||||
const read = await r.read(slice);
|
||||
|
@ -210,9 +209,7 @@
|
|||
break;
|
||||
}
|
||||
}
|
||||
if (signal?.aborted) {
|
||||
throw new DOMException("The read operation was aborted.", "AbortError");
|
||||
}
|
||||
signal?.throwIfAborted();
|
||||
|
||||
// Handle truncated or extended files during read
|
||||
if (cursor > size) {
|
||||
|
|
|
@ -13,9 +13,7 @@
|
|||
data,
|
||||
options = {},
|
||||
) {
|
||||
if (options?.signal?.aborted) {
|
||||
throw new DOMException("The write operation was aborted.", "AbortError");
|
||||
}
|
||||
options.signal?.throwIfAborted();
|
||||
if (options.create !== undefined) {
|
||||
const create = !!options.create;
|
||||
if (!create) {
|
||||
|
@ -73,14 +71,15 @@
|
|||
|
||||
const signal = options?.signal ?? null;
|
||||
let nwritten = 0;
|
||||
while (!signal?.aborted && nwritten < data.length) {
|
||||
nwritten += await file.write(TypedArrayPrototypeSubarray(data, nwritten));
|
||||
}
|
||||
|
||||
file.close();
|
||||
|
||||
if (signal?.aborted) {
|
||||
throw new DOMException("The write operation was aborted.", "AbortError");
|
||||
try {
|
||||
while (nwritten < data.length) {
|
||||
signal?.throwIfAborted();
|
||||
nwritten += await file.write(
|
||||
TypedArrayPrototypeSubarray(data, nwritten),
|
||||
);
|
||||
}
|
||||
} finally {
|
||||
file.close();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue