summaryrefslogtreecommitdiff
path: root/cli/js/dispatch_json.ts
diff options
context:
space:
mode:
authorBartek IwaƄczuk <biwanczuk@gmail.com>2019-10-14 23:46:27 +0200
committerRyan Dahl <ry@tinyclouds.org>2019-10-14 17:46:27 -0400
commit4221b90c3febbe03a4b47e47248263741a0fdd4a (patch)
tree0c16487c197863fb1223f37a9c589905517dfdcd /cli/js/dispatch_json.ts
parent605659535794ca0d8fe3ee4ea5857b418d7ce091 (diff)
perf: eager poll async ops in Isolate (#3046)
Diffstat (limited to 'cli/js/dispatch_json.ts')
-rw-r--r--cli/js/dispatch_json.ts12
1 files changed, 9 insertions, 3 deletions
diff --git a/cli/js/dispatch_json.ts b/cli/js/dispatch_json.ts
index 572ec855a..890568409 100644
--- a/cli/js/dispatch_json.ts
+++ b/cli/js/dispatch_json.ts
@@ -75,11 +75,17 @@ export async function sendAsync(
const promiseId = nextPromiseId();
args = Object.assign(args, { promiseId });
const promise = util.createResolvable<Ok>();
- promiseTable.set(promiseId, promise);
const argsUi8 = encode(args);
- const resUi8 = core.dispatch(opId, argsUi8, zeroCopy);
- util.assert(resUi8 == null);
+ const buf = core.dispatch(opId, argsUi8, zeroCopy);
+ if (buf) {
+ // Sync result.
+ const res = decode(buf);
+ promise.resolve(res);
+ } else {
+ // Async result.
+ promiseTable.set(promiseId, promise);
+ }
const res = await promise;
return unwrapResponse(res);