#define njs_vm_pending(vm) (njs_vm_waiting(vm) || njs_vm_posted(vm))
+#define njs_vm_unhandled_rejection(vm) \
+ ((vm)->options.unhandled_rejection == NJS_VM_OPT_UNHANDLED_REJECTION_THROW \
+ && (vm)->promise_reason != NULL && (vm)->promise_reason->length != 0)
/*
* Runs the specified function with provided arguments.
}
}
- if (vm->options.unhandled_rejection
- == NJS_VM_OPT_UNHANDLED_REJECTION_THROW)
- {
- if (vm->promise_reason != NULL && vm->promise_reason->length != 0) {
- ret = njs_value_to_string(vm, &string,
- &vm->promise_reason->start[0]);
- if (njs_slow_path(ret != NJS_OK)) {
- return ret;
- }
-
- njs_string_get(&string, &str);
- njs_vm_error(vm, "unhandled promise rejection: %V", &str);
-
- njs_mp_free(vm->mem_pool, vm->promise_reason);
- vm->promise_reason = NULL;
-
- return NJS_ERROR;
+ if (njs_vm_unhandled_rejection(vm)) {
+ ret = njs_value_to_string(vm, &string,
+ &vm->promise_reason->start[0]);
+ if (njs_slow_path(ret != NJS_OK)) {
+ return ret;
}
+
+ njs_string_get(&string, &str);
+ njs_vm_error(vm, "unhandled promise rejection: %V", &str);
+
+ njs_mp_free(vm->mem_pool, vm->promise_reason);
+ vm->promise_reason = NULL;
+
+ return NJS_ERROR;
}
for ( ;; ) {
njs_run {"./test/js/promise_reject_post_catch.js"} \
"Error: unhandled promise rejection: undefined"
+njs_run {"./test/js/promise_rejection_tracker.js"} \
+"Thrown:
+Error: unhandled promise rejection: 1"
+
njs_run {"./test/js/promise_all.js"} \
"resolved:\\\[\\\['one','two'],\\\['three','four']]"