11using async_fn = std::function<void(msgpack::sbuffer&)>;
31 : Napi::AsyncWorker(env)
47 }
catch (
const std::exception& e) {
52 SetError(
"Unknown exception occurred during async operation");
92 auto dummy = Napi::Function::New(env, [](
const Napi::CallbackInfo&) {});
93 _completion_tsfn = Napi::ThreadSafeFunction::New(env, dummy,
"ThreadedAsyncOpComplete", 0, 1);
105 std::thread([
this]() {
109 }
catch (
const std::exception& e) {
113 _error =
"Unknown exception occurred during threaded async operation";
121 auto buf = Napi::Buffer<char>::Copy(env, op->_result.data(), op->_result.size());
122 op->_deferred->Resolve(buf);
124 auto error = Napi::Error::New(env, op->_error);
125 op->_deferred->Reject(error.Value());
Encapsulatest some work that can be done off the JavaScript main thread.
AsyncOperation & operator=(AsyncOperation &&)=delete
AsyncOperation(AsyncOperation &&)=delete
AsyncOperation & operator=(const AsyncOperation &)=delete
AsyncOperation(const AsyncOperation &)=delete
~AsyncOperation() override=default
AsyncOperation(Napi::Env env, std::shared_ptr< Napi::Promise::Deferred > deferred, async_fn fn)
void OnError(const Napi::Error &e) override
std::shared_ptr< Napi::Promise::Deferred > _deferred
Runs work on a dedicated std::thread instead of the libuv thread pool.
ThreadedAsyncOperation & operator=(const ThreadedAsyncOperation &)=delete
ThreadedAsyncOperation(Napi::Env env, std::shared_ptr< Napi::Promise::Deferred > deferred, async_fn fn)
ThreadedAsyncOperation(const ThreadedAsyncOperation &)=delete
~ThreadedAsyncOperation()=default
std::shared_ptr< Napi::Promise::Deferred > _deferred
ThreadedAsyncOperation & operator=(ThreadedAsyncOperation &&)=delete
Napi::ThreadSafeFunction _completion_tsfn
ThreadedAsyncOperation(ThreadedAsyncOperation &&)=delete
std::function< void(msgpack::sbuffer &)> async_fn