diff --git a/async_work_promise/node-addon-api/addon.cc b/async_work_promise/node-addon-api/addon.cc new file mode 100644 index 00000000..35abd245 --- /dev/null +++ b/async_work_promise/node-addon-api/addon.cc @@ -0,0 +1,32 @@ +#include "napi.h" +#include "worker.h" + +Napi::Value DoHeavyMath(const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + + if (!info[0].IsNumber()) { + Napi::TypeError::New(env, "num1 must be a number") + .ThrowAsJavaScriptException(); + return env.Undefined(); + } + uint32_t num_1 = info[0].As().Uint32Value(); + + if (!info[1].IsNumber()) { + Napi::TypeError::New(env, "num2 must be a number") + .ThrowAsJavaScriptException(); + return env.Undefined(); + } + uint32_t num_2 = info[1].As().Uint32Value(); + + DoHeavyMathWorker* worker = new DoHeavyMathWorker(env, num_1, num_2); + worker->Queue(); + return worker->GetPromise(); +} + +Napi::Object Init(Napi::Env env, Napi::Object exports) { + exports.Set(Napi::String::New(env, "doHeavyMath"), + Napi::Function::New(env, DoHeavyMath)); + return exports; +} + +NODE_API_MODULE(NODE_GYP_MODULE_NAME, Init) diff --git a/async_work_promise/node-addon-api/binding.gyp b/async_work_promise/node-addon-api/binding.gyp new file mode 100644 index 00000000..70c2618d --- /dev/null +++ b/async_work_promise/node-addon-api/binding.gyp @@ -0,0 +1,32 @@ +{ + "targets": [{ + "target_name": "addon", + "sources": [ + "addon.cc" + ], + "include_dirs": [ + "