Skip to content

Commit 4b3d50e

Browse files
stepankuzmingithub-actions[bot]
authored andcommitted
Use AbortSignal APIs for cancellation (internal-15053)
GitOrigin-RevId: 340c60cf2545304876ff2123c22d959b0e2420ea
1 parent df8e267 commit 4b3d50e

8 files changed

Lines changed: 17 additions & 22 deletions

File tree

3d-style/source/tiled_3d_model_worker_source.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ class Tiled3dModelWorkerSource implements WorkerSource {
156156
delete this.loading[uid];
157157
workerTile.status = 'done';
158158
this.loaded[uid] = workerTile;
159-
if (err instanceof DOMException && err.name === 'AbortError') return null;
159+
if (controller.signal.aborted) return null;
160160
throw err;
161161
}
162162

3d-style/util/loaders.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -352,7 +352,7 @@ export async function decodeGLTF(arrayBuffer: ArrayBuffer, byteOffset: number =
352352
await Promise.all(bufferLoads);
353353
}
354354

355-
if (signal && signal.aborted) throw new DOMException('Aborted', 'AbortError');
355+
if (signal) signal.throwIfAborted();
356356

357357
const assetLoads: Promise<unknown>[] = [];
358358
const dracoUsed = extensionsUsed && extensionsUsed.includes(DRACO_EXT);
@@ -374,7 +374,7 @@ export async function decodeGLTF(arrayBuffer: ArrayBuffer, byteOffset: number =
374374
await Promise.all(assetLoads);
375375
}
376376

377-
if (signal && signal.aborted) throw new DOMException('Aborted', 'AbortError');
377+
if (signal) signal.throwIfAborted();
378378

379379
if (dracoUsed && meshes) {
380380
for (const {primitives} of meshes) {

src/source/load_vector_tile.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ export function loadVectorTile(
108108
});
109109
})
110110
.catch((err: Error) => {
111-
if (err.name === 'AbortError') return;
111+
if (controller.signal.aborted) return;
112112
// HTTP 404 on a sparse tileset: the tile intentionally doesn't exist.
113113
// Convert to empty result — no parent fallback for HTTP sources.
114114
if (isHttpNotFound(err)) {

src/source/raster_array_tile.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ class RasterArrayTile extends Tile implements Tile {
178178
callback(error as Error);
179179
}
180180
})
181-
.catch((err: Error) => { if (err.name !== 'AbortError') callback(err); });
181+
.catch((err: Error) => { if (!controller.signal.aborted) callback(err); });
182182

183183
return this.request;
184184
}
@@ -316,7 +316,7 @@ class RasterArrayTile extends Tile implements Tile {
316316
const controller = new AbortController();
317317
getArrayBuffer(rangeRequestParams, controller.signal)
318318
.then(({data: buffer}) => onDataLoaded(null, buffer))
319-
.catch((err: Error) => { if (err.name !== 'AbortError') onDataLoaded(err); });
319+
.catch((err: Error) => { if (!controller.signal.aborted) onDataLoaded(err); });
320320

321321
if (layerId !== null) {
322322
const fetchQueue = this._fetchQueuePerLayer.get(layerId) || [];

src/source/raster_array_tile_worker_source.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ class RasterArrayTileWorkerSource implements WorkerSource {
101101
const mrt = await workerTile.parse(data);
102102
return {mrt, headers};
103103
} catch (err) {
104-
if (err instanceof DOMException && err.name === 'AbortError') return null;
104+
if (controller.signal.aborted) return null;
105105
workerTile.status = 'done';
106106
this.loaded[uid] = workerTile;
107107
throw err;

src/source/raster_dem_tile_worker_source.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ class RasterDEMTileWorkerSource implements WorkerSource {
4040
result.headers = headers;
4141
return result;
4242
} catch (err) {
43-
if (err instanceof DOMException && err.name === 'AbortError') return null;
43+
if (controller.signal.aborted) return null;
4444
throw err;
4545
} finally {
4646
delete this.loading[uid];
@@ -87,7 +87,6 @@ class RasterDEMTileWorkerSource implements WorkerSource {
8787
return result;
8888
} catch (err) {
8989
if (controller.signal.aborted) return null;
90-
if (err instanceof DOMException && err.name === 'AbortError') return null;
9190
throw err;
9291
} finally {
9392
delete this.loading[uid];

src/util/actor.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ class Actor<Outbox extends MessageMap> {
102102
const buffers: Set<Transferable> = new Set();
103103

104104
if (signal && signal.aborted) {
105-
return Promise.reject(new DOMException('Aborted', 'AbortError'));
105+
return Promise.reject(signal.reason as Error);
106106
}
107107

108108
this.target.postMessage({
@@ -122,7 +122,7 @@ class Actor<Outbox extends MessageMap> {
122122
if (signal) {
123123
const abortHandler = () => {
124124
this.pendingResponses.delete(id);
125-
reject(new DOMException('Aborted', 'AbortError'));
125+
reject(signal.reason as Error);
126126
};
127127
signal.addEventListener('abort', abortHandler, {once: true});
128128
entry.detach = () => signal.removeEventListener('abort', abortHandler);

src/util/ajax.ts

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ async function makeFetchRequest<T>(requestParameters: RequestParameters, signal?
157157
if ((err as Error).message !== 'SecurityError') warnOnce((err as Error).toString());
158158
}
159159
if (cached && cached.fresh) {
160-
if (signal && signal.aborted) throw new DOMException('Aborted', 'AbortError');
160+
if (signal) signal.throwIfAborted();
161161
return readResponse<T>(requestParameters, cached.response);
162162
}
163163
}
@@ -173,7 +173,7 @@ async function makeFetchRequest<T>(requestParameters: RequestParameters, signal?
173173
throw new Error(`${(err as Error).message} ${requestParameters.url}`, {cause: err});
174174
}
175175

176-
if (signal && signal.aborted) throw new DOMException('Aborted', 'AbortError');
176+
if (signal) signal.throwIfAborted();
177177
if (!fetched.ok) throw new AJAXError(fetched.statusText, fetched.status, requestParameters.url);
178178

179179
// Clone before reading the body; cache the clone after the read completes. Aborting
@@ -195,7 +195,7 @@ async function makeXMLHttpRequest<T>(requestParameters: RequestParameters, signa
195195
const onAbort = () => {
196196
signal.removeEventListener('abort', onAbort);
197197
xhr.abort();
198-
reject(new DOMException('Aborted', 'AbortError'));
198+
reject(signal.reason as Error);
199199
};
200200

201201
if (signal) {
@@ -253,9 +253,7 @@ async function makeXMLHttpRequest<T>(requestParameters: RequestParameters, signa
253253
}
254254

255255
async function makeRequest<T>(requestParameters: RequestParameters, signal?: AbortSignal): Promise<RequestResponse<T>> {
256-
if (signal && signal.aborted) {
257-
throw new DOMException('Aborted', 'AbortError');
258-
}
256+
if (signal) signal.throwIfAborted();
259257

260258
if (isFileURL(requestParameters.url)) {
261259
return makeXMLHttpRequest<T>(requestParameters, signal);
@@ -299,7 +297,7 @@ resetImageRequestQueue();
299297
function acquireImageRequest(signal?: AbortSignal): Promise<() => void> {
300298
return new Promise((resolve, reject) => {
301299
if (signal && signal.aborted) {
302-
reject(new DOMException('Aborted', 'AbortError'));
300+
reject(signal.reason as Error);
303301
return;
304302
}
305303

@@ -327,7 +325,7 @@ function acquireImageRequest(signal?: AbortSignal): Promise<() => void> {
327325
const cancel = () => {
328326
const index = imageRequestQueue.indexOf(dequeue);
329327
if (index !== -1) imageRequestQueue.splice(index, 1);
330-
reject(new DOMException('Aborted', 'AbortError'));
328+
reject(signal.reason as Error);
331329
};
332330

333331
if (signal) signal.addEventListener('abort', cancel);
@@ -354,9 +352,7 @@ export async function getImage(requestParameters: RequestParameters, signal?: Ab
354352
throw new Error(`Could not load image because of ${(e as Error).message}. Please make sure to use a supported image type such as PNG or JPEG. Note that SVGs are not supported.`, {cause: e});
355353
}
356354
// A late-resolving body must not deliver after abort, or it resurrects torn-down ImageSource state.
357-
if (signal && signal.aborted) {
358-
throw new DOMException('Aborted', 'AbortError');
359-
}
355+
if (signal) signal.throwIfAborted();
360356
return {data: bitmap, headers};
361357
} finally {
362358
release();

0 commit comments

Comments
 (0)