]> git.kaiwu.me - njs.git/commitdiff
Fixed order of code execution after await in try block.
authorAlexander Borisov <alexander.borisov@nginx.com>
Wed, 1 Sep 2021 18:25:10 +0000 (21:25 +0300)
committerAlexander Borisov <alexander.borisov@nginx.com>
Wed, 1 Sep 2021 18:25:10 +0000 (21:25 +0300)
The bug was introduced in 92d10cd761e2.

src/njs_async.c
test/js/async_await_try_resolve.js [new file with mode: 0644]
test/njs_expect_test.exp

index 4d9b81042bfd818c5627d91a0ba367dbd9fd973a..3c8c95dbf5bfe2f8c2f5db24978ec2d2c6ec1d3b 100644 (file)
@@ -90,7 +90,7 @@ njs_await_fulfilled(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs,
 
     vm->top_frame->retval = &vm->retval;
 
-    ret = njs_vmcode_interpreter(vm, async->pc);
+    ret = njs_vmcode_interpreter(vm, ctx->pc);
 
     vm->levels[NJS_LEVEL_LOCAL] = cur_local;
     vm->levels[NJS_LEVEL_CLOSURE] = cur_closures;
@@ -148,6 +148,8 @@ njs_await_rejected(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs,
         return NJS_ERROR;
     }
 
+    ctx->pc = ctx->await->pc;
+
     return njs_await_fulfilled(vm, args, nargs, unused);
 }
 
diff --git a/test/js/async_await_try_resolve.js b/test/js/async_await_try_resolve.js
new file mode 100644 (file)
index 0000000..b041de1
--- /dev/null
@@ -0,0 +1,15 @@
+async function af() {
+    let key;
+
+    try {
+        key = await Promise.resolve("key");
+        key += ": resolve";
+
+    } catch (e) {
+        key += ": exception";
+    }
+
+    return key;
+};
+
+af().then(v => console.log(v));
index d505098a86d1ce089098061d7ca58ef97b9c120c..1eb491ee4d935c81b0ba04a09e8d1709a4632387 100644 (file)
@@ -1171,3 +1171,5 @@ njs_run {"./test/js/async_await_try_throw_catch.js"} \
 finally
 end"
 
+njs_run {"./test/js/async_await_try_resolve.js"} \
+"key: resolve"