[njs] Shell: fixed unhandled rejected promises handling.

Dmitry Volyntsev xeioex at nginx.com
Wed Jan 24 00:40:15 UTC 2024


details:   https://hg.nginx.org/njs/rev/6485ad23565e
branches:  
changeset: 2270:6485ad23565e
user:      Dmitry Volyntsev <xeioex at nginx.com>
date:      Tue Jan 23 16:33:29 2024 -0800
description:
Shell: fixed unhandled rejected promises handling.

The issue was introduced in dffdf7c50dfc (not released yet).

diffstat:

 external/njs_shell.c                   |  10 +++++-----
 test/js/promise_reject_post_catch.t.js |   9 ---------
 test/shell_test.exp                    |   9 +++++++++
 3 files changed, 14 insertions(+), 14 deletions(-)

diffs (59 lines):

diff -r 8aad26845b18 -r 6485ad23565e external/njs_shell.c
--- a/external/njs_shell.c	Thu Jan 18 18:03:35 2024 -0800
+++ b/external/njs_shell.c	Tue Jan 23 16:33:29 2024 -0800
@@ -1207,6 +1207,11 @@ njs_process_script(njs_vm_t *vm, void *r
             }
         }
 
+        ret = njs_process_events(runtime);
+        if (njs_slow_path(ret == NJS_ERROR)) {
+            break;
+        }
+
         if (njs_unhandled_rejection(runtime)) {
             njs_process_output(vm, NULL, NJS_ERROR);
 
@@ -1215,11 +1220,6 @@ njs_process_script(njs_vm_t *vm, void *r
             }
         }
 
-        ret = njs_process_events(runtime);
-        if (njs_slow_path(ret == NJS_ERROR)) {
-            break;
-        }
-
         if (ret == NJS_OK) {
             break;
         }
diff -r 8aad26845b18 -r 6485ad23565e test/js/promise_reject_post_catch.t.js
--- a/test/js/promise_reject_post_catch.t.js	Thu Jan 18 18:03:35 2024 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,9 +0,0 @@
-/*---
-includes: []
-flags: []
-negative:
-  phase: runtime
----*/
-
-var p = Promise.reject();
-setImmediate(() => {p.catch(() => {})});
diff -r 8aad26845b18 -r 6485ad23565e test/shell_test.exp
--- a/test/shell_test.exp	Thu Jan 18 18:03:35 2024 -0800
+++ b/test/shell_test.exp	Tue Jan 23 16:33:29 2024 -0800
@@ -476,6 +476,15 @@ ReferenceError: \"ref\" is not defined
     at anonymous \\\(string:1\\\)
     at main \\\(string:1\\\)\n$"
 
+njs_test {
+    {"setImmediate(() => { console.log('x'); return Promise.reject('xx'); })\r\n"
+     "0\r\nx\r\nThrown:\r\nError: unhandled promise rejection: xx\r\n"}
+    {"setImmediate(() => { console.log('x'); return Promise.reject('xx'); })\r\n"
+     "1\r\nx\r\nThrown:\r\nError: unhandled promise rejection: xx\r\n"}
+    {"42\r\n"
+     "42\r\n"}
+}
+
 # CLI OPTIONS
 
 # help


More information about the nginx-devel mailing list