diff options
Diffstat (limited to 'ext')
-rw-r--r-- | ext/fetch/26_fetch.js | 17 | ||||
-rw-r--r-- | ext/flash/01_http.js | 85 | ||||
-rw-r--r-- | ext/web/06_streams.js | 5 | ||||
-rw-r--r-- | ext/webgpu/src/01_webgpu.js | 4 |
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), |