summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
Diffstat (limited to 'ext')
-rw-r--r--ext/fetch/26_fetch.js17
-rw-r--r--ext/flash/01_http.js85
-rw-r--r--ext/web/06_streams.js5
-rw-r--r--ext/webgpu/src/01_webgpu.js4
4 files changed, 72 insertions, 39 deletions
diff --git a/ext/fetch/26_fetch.js b/ext/fetch/26_fetch.js
index 5c824898d..e522079bf 100644
--- a/ext/fetch/26_fetch.js
+++ b/ext/fetch/26_fetch.js
@@ -529,14 +529,15 @@
// 2.6.
// Rather than consuming the body as an ArrayBuffer, this passes each
// chunk to the feed as soon as it's available.
- (async () => {
- const reader = res.body.getReader();
- while (true) {
- const { value: chunk, done } = await reader.read();
- if (done) break;
- ops.op_wasm_streaming_feed(rid, chunk);
- }
- })().then(
+ PromisePrototypeThen(
+ (async () => {
+ const reader = res.body.getReader();
+ while (true) {
+ const { value: chunk, done } = await reader.read();
+ if (done) break;
+ ops.op_wasm_streaming_feed(rid, chunk);
+ }
+ })(),
// 2.7
() => core.close(rid),
// 2.8
diff --git a/ext/flash/01_http.js b/ext/flash/01_http.js
index 5e6cb69aa..df013ce65 100644
--- a/ext/flash/01_http.js
+++ b/ext/flash/01_http.js
@@ -29,11 +29,13 @@
const {
Function,
ObjectPrototypeIsPrototypeOf,
- PromiseAll,
+ Promise,
+ PromisePrototypeCatch,
+ PromisePrototypeThen,
+ SafePromiseAll,
TypedArrayPrototypeSubarray,
TypeError,
Uint8Array,
- Promise,
Uint8ArrayPrototype,
} = window.__bootstrap.primordials;
@@ -342,24 +344,27 @@
}
const reader = respBody.getReader(); // Aquire JS lock.
try {
- core.opAsync(
- "op_flash_write_resource",
- http1Response(
- method,
- innerResp.status ?? 200,
- innerResp.headerList,
- 0, // Content-Length will be set by the op.
- null,
- true,
+ PromisePrototypeThen(
+ core.opAsync(
+ "op_flash_write_resource",
+ http1Response(
+ method,
+ innerResp.status ?? 200,
+ innerResp.headerList,
+ 0, // Content-Length will be set by the op.
+ null,
+ true,
+ ),
+ serverId,
+ i,
+ resourceBacking.rid,
+ resourceBacking.autoClose,
),
- serverId,
- i,
- resourceBacking.rid,
- resourceBacking.autoClose,
- ).then(() => {
- // Release JS lock.
- readableStreamClose(respBody);
- });
+ () => {
+ // Release JS lock.
+ readableStreamClose(respBody);
+ },
+ );
} catch (error) {
await reader.cancel(error);
throw error;
@@ -486,10 +491,16 @@
const serverId = core.ops.op_flash_serve(listenOpts);
const serverPromise = core.opAsync("op_flash_drive_server", serverId);
- core.opAsync("op_flash_wait_for_listening", serverId).then((port) => {
- onListen({ hostname: listenOpts.hostname, port });
- }).catch(() => {});
- const finishedPromise = serverPromise.catch(() => {});
+ PromisePrototypeCatch(
+ PromisePrototypeThen(
+ core.opAsync("op_flash_wait_for_listening", serverId),
+ (port) => {
+ onListen({ hostname: listenOpts.hostname, port });
+ },
+ ),
+ () => {},
+ );
+ const finishedPromise = PromisePrototypeCatch(serverPromise, () => {});
const server = {
id: serverId,
@@ -554,7 +565,27 @@
let resp;
try {
resp = handler(req);
- if (resp instanceof Promise || typeof resp?.then === "function") {
+ if (resp instanceof Promise) {
+ PromisePrototypeCatch(
+ PromisePrototypeThen(
+ resp,
+ (resp) =>
+ handleResponse(
+ req,
+ resp,
+ body,
+ hasBody,
+ method,
+ serverId,
+ i,
+ respondFast,
+ respondChunked,
+ ),
+ ),
+ onError,
+ );
+ continue;
+ } else if (typeof resp?.then === "function") {
resp.then((resp) =>
handleResponse(
req,
@@ -595,7 +626,7 @@
signal?.addEventListener("abort", () => {
clearInterval(dateInterval);
- server.close().then(() => {}, () => {});
+ PromisePrototypeThen(server.close(), () => {}, () => {});
}, {
once: true,
});
@@ -638,8 +669,8 @@
}, 1000);
}
- await PromiseAll([
- server.serve().catch(console.error),
+ await SafePromiseAll([
+ PromisePrototypeCatch(server.serve(), console.error),
serverPromise,
]);
}
diff --git a/ext/web/06_streams.js b/ext/web/06_streams.js
index 06397265c..0b9e00483 100644
--- a/ext/web/06_streams.js
+++ b/ext/web/06_streams.js
@@ -35,7 +35,6 @@
ObjectPrototypeIsPrototypeOf,
ObjectSetPrototypeOf,
Promise,
- PromiseAll,
PromisePrototypeCatch,
PromisePrototypeThen,
PromiseReject,
@@ -43,6 +42,7 @@
queueMicrotask,
RangeError,
ReflectHas,
+ SafePromiseAll,
SharedArrayBuffer,
Symbol,
SymbolAsyncIterator,
@@ -2302,7 +2302,8 @@
});
}
shutdownWithAction(
- () => PromiseAll(ArrayPrototypeMap(actions, (action) => action())),
+ () =>
+ SafePromiseAll(ArrayPrototypeMap(actions, (action) => action())),
true,
error,
);
diff --git a/ext/webgpu/src/01_webgpu.js b/ext/webgpu/src/01_webgpu.js
index caa103e62..f4d15e2dd 100644
--- a/ext/webgpu/src/01_webgpu.js
+++ b/ext/webgpu/src/01_webgpu.js
@@ -27,12 +27,12 @@
ObjectDefineProperty,
ObjectPrototypeIsPrototypeOf,
Promise,
- PromiseAll,
PromisePrototypeCatch,
PromisePrototypeThen,
PromiseReject,
PromiseResolve,
SafeArrayIterator,
+ SafePromiseAll,
Set,
SetPrototypeEntries,
SetPrototypeForEach,
@@ -1517,7 +1517,7 @@
"OperationError",
);
}
- const operations = PromiseAll(scope.operations);
+ const operations = SafePromiseAll(scope.operations);
return PromisePrototypeThen(
operations,
() => PromiseResolve(null),