diff --git a/src/dbi.cpp b/src/dbi.cpp index 927aa401b..65b5cf910 100644 --- a/src/dbi.cpp +++ b/src/dbi.cpp @@ -312,7 +312,13 @@ class PrefetchWorker : public AsyncWorker { } void OnOK() { - Callback().Call({Env().Null()}); + napi_value result; // we use direct napi call here because node-addon-api interface with throw a fatal error if a worker thread is terminating + napi_call_function(Env(), Env().Undefined(), Callback().Value(), 0, {}, &result); + } + void OnError(const Error& e) { + napi_value result; // we use direct napi call here because node-addon-api interface with throw a fatal error if a worker thread is terminating + napi_value arg = e.Value(); + napi_call_function(Env(), Env().Undefined(), Callback().Value(), 1, &arg, &result); } private: diff --git a/src/env.cpp b/src/env.cpp index 211423c0f..404f85a7d 100644 --- a/src/env.cpp +++ b/src/env.cpp @@ -138,6 +138,11 @@ class SyncWorker : public AsyncWorker { napi_value result; // we use direct napi call here because node-addon-api interface with throw a fatal error if a worker thread is terminating napi_call_function(Env(), Env().Undefined(), Callback().Value(), 0, {}, &result); } + void OnError(const Error& e) { + napi_value result; // we use direct napi call here because node-addon-api interface with throw a fatal error if a worker thread is terminating + napi_value arg = e.Value(); + napi_call_function(Env(), Env().Undefined(), Callback().Value(), 1, &arg, &result); + } void Execute() { #ifdef _WIN32 diff --git a/src/lmdb-js.h b/src/lmdb-js.h index bae97a16c..370cc047f 100644 --- a/src/lmdb-js.h +++ b/src/lmdb-js.h @@ -243,6 +243,7 @@ class AsyncWriteWorker : public WriteWorker, public AsyncProgressWorker { void Execute(const AsyncProgressWorker::ExecutionProgress& execution); void OnProgress(const char* data, size_t count); void OnOK(); + void OnError(const Error& e); void ReportError(const char* error); void SendUpdate(); private: diff --git a/src/writer.cpp b/src/writer.cpp index ae991a470..4f4573d06 100644 --- a/src/writer.cpp +++ b/src/writer.cpp @@ -459,6 +459,12 @@ void AsyncWriteWorker::OnOK() { napi_create_int32(Env(), 0, &arg); napi_call_function(Env(), Env().Undefined(), Callback().Value(), 1, &arg, &result); } +void AsyncWriteWorker::OnError(const Error& e) { + finishedProgress = true; + napi_value result; // we use direct napi call here because node-addon-api interface with throw a fatal error if a worker thread is terminating + napi_value arg = e.Value(); + napi_call_function(Env(), Env().Undefined(), Callback().Value(), 1, &arg, &result); +} Value EnvWrap::resumeWriting(const Napi::CallbackInfo& info) { // if we had async txns, now we resume