@@ -16,8 +16,6 @@ using v8::Local;
1616using v8::MaybeLocal;
1717using v8::Object;
1818using v8::Promise;
19- using v8::PromiseRejectEvent;
20- using v8::PromiseRejectMessage;
2119using v8::String;
2220using v8::Value;
2321
@@ -52,30 +50,21 @@ void SetupNextTick(const FunctionCallbackInfo<Value>& args) {
5250 args.GetReturnValue ().Set (ret);
5351}
5452
55- void PromiseRejectCallback (PromiseRejectMessage message) {
53+ void PromiseRejectCallback (PromiseHookType type,
54+ Local<Promise> promise,
55+ Local<Value> value,
56+ void * arg) {
5657 static std::atomic<uint64_t > unhandledRejections{0 };
5758 static std::atomic<uint64_t > rejectionsHandledAfter{0 };
5859
59- Local<Promise> promise = message.GetPromise ();
60- Isolate* isolate = promise->GetIsolate ();
61- PromiseRejectEvent event = message.GetEvent ();
62-
63- Environment* env = Environment::GetCurrent (isolate);
60+ Environment* env = static_cast <Environment*>(arg);
6461 Local<Function> callback;
65- Local<Value> value;
6662
67- if (event == v8:: kPromiseRejectWithNoHandler ) {
63+ if (type == PromiseHookType:: kRejectWithNoHandler ) {
6864 callback = env->promise_reject_unhandled_function ();
69- value = message.GetValue ();
70-
71- if (value.IsEmpty ())
72- value = Undefined (isolate);
73-
7465 unhandledRejections++;
75- } else if (event == v8:: kPromiseHandlerAddedAfterReject ) {
66+ } else if (type == PromiseHookType:: kHandlerAddedAfterReject ) {
7667 callback = env->promise_reject_handled_function ();
77- value = Undefined (isolate);
78-
7968 rejectionsHandledAfter++;
8069 } else {
8170 return ;
@@ -86,10 +75,13 @@ void PromiseRejectCallback(PromiseRejectMessage message) {
8675 " unhandled" , unhandledRejections,
8776 " handledAfter" , rejectionsHandledAfter);
8877
78+ if (value.IsEmpty ()) {
79+ value = Undefined (env->isolate ());
80+ }
8981
9082 Local<Value> args[] = { promise, value };
9183 MaybeLocal<Value> ret = callback->Call (env->context (),
92- Undefined (isolate),
84+ Undefined (env-> isolate () ),
9385 arraysize (args),
9486 args);
9587
@@ -99,14 +91,14 @@ void PromiseRejectCallback(PromiseRejectMessage message) {
9991
10092void SetupPromises (const FunctionCallbackInfo<Value>& args) {
10193 Environment* env = Environment::GetCurrent (args);
102- Isolate* isolate = env->isolate ();
10394
10495 CHECK (args[0 ]->IsFunction ());
10596 CHECK (args[1 ]->IsFunction ());
10697
107- isolate->SetPromiseRejectCallback (PromiseRejectCallback);
10898 env->set_promise_reject_unhandled_function (args[0 ].As <Function>());
10999 env->set_promise_reject_handled_function (args[1 ].As <Function>());
100+
101+ env->AddPromiseRejectHook (PromiseRejectCallback, env);
110102}
111103
112104#define BOOTSTRAP_METHOD (name, fn ) env->SetMethod (bootstrapper, #name, fn)
0 commit comments