js v2 compatibility shim supports tile cancellation

This commit is contained in:
Brandon Liu
2022-10-05 17:22:37 +08:00
parent 64d7815149
commit b108831159
3 changed files with 11 additions and 9 deletions

View File

@@ -81,15 +81,16 @@ export class Protocol {
controller.abort();
};
instance.getZxy(+z, +x, +y, signal).then((arr) => {
if (arr) {
let data = new Uint8Array(arr.data);
callback(null, data, null, null);
instance.getZxy(+z, +x, +y, signal).then((resp) => {
if (resp) {
callback(null, new Uint8Array(resp.data), resp.cacheControl, resp.expires);
} else {
callback(null, new Uint8Array(), null, null);
}
}).catch((e) => {
console.log(e);
if (e.name !== "AbortError") {
throw e;
}
});
return {
cancel: cancel

View File

@@ -780,7 +780,7 @@ export class PMTiles {
// V2 COMPATIBILITY
if (header.specVersion < 3) {
return v2.getZxy(header, this.source, this.cache, z, x, y);
return v2.getZxy(header, this.source, this.cache, z, x, y, signal);
}
if (z < header.minZoom || z > header.maxZoom) {

View File

@@ -261,7 +261,8 @@ async function getZxy(
cache: Cache,
z: number,
x: number,
y: number
y: number,
signal?: AbortSignal
): Promise<RangeResponse | undefined> {
let root_dir = await cache.getArrayBuffer(
source,
@@ -275,7 +276,7 @@ async function getZxy(
const entry = queryTile(new DataView(root_dir), z, x, y);
if (entry) {
let resp = await source.getBytes(entry.offset, entry.length); // TODO signal
let resp = await source.getBytes(entry.offset, entry.length, signal);
let tile_data = resp.data;
let view = new DataView(tile_data);
@@ -309,7 +310,7 @@ async function getZxy(
}
let tile_entry = queryTile(new DataView(leaf_dir), z, x, y);
if (tile_entry) {
let resp = await source.getBytes(tile_entry.offset, tile_entry.length); // TODO signal
let resp = await source.getBytes(tile_entry.offset, tile_entry.length, signal);
let tile_data = resp.data;
let view = new DataView(tile_data);