From: Alexander Borisov Date: Wed, 1 Sep 2021 18:25:10 +0000 (+0300) Subject: Fixed order of code execution after await in try block. X-Git-Tag: 0.7.0~27 X-Git-Url: http://git.kaiwu.me/postgresql/log/contrib/postgres_fdw/%7B@url%7D?a=commitdiff_plain;h=505d14ddcfad1d9b3817989af624347115da9e69;p=njs.git Fixed order of code execution after await in try block. The bug was introduced in 92d10cd761e2. --- diff --git a/src/njs_async.c b/src/njs_async.c index 4d9b8104..3c8c95db 100644 --- a/src/njs_async.c +++ b/src/njs_async.c @@ -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 index 00000000..b041de15 --- /dev/null +++ b/test/js/async_await_try_resolve.js @@ -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)); diff --git a/test/njs_expect_test.exp b/test/njs_expect_test.exp index d505098a..1eb491ee 100644 --- a/test/njs_expect_test.exp +++ b/test/njs_expect_test.exp @@ -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"