#node.js #node.js-addon
#node.js #node.js-дополнение
Вопрос:
napi_create_date
Функция появилась в Node.js начиная с версии 11.11.0. https://nodejs.org/api/n-api.html#n_api_napi_create_date
Какие существуют обходные пути для создания JS Date (из C double) на Node.js 10.15.3 используя только N-API и V8 API?
Или, может быть, я могу получить изоляцию версии 8 из N-API?
Или как я могу объединить N-API и NAN для создания даты и использовать ее в napi_call_function
?
Мне нужен какой-то способ создать значение даты (из C double) для napi_call_function
вызова.
Ответ №1:
На данный момент я написал такой обходной путь. Правильнее использовать env->context()
вместо v8::Isolate::GetCurrent()
, но napi_env
это определено в src/js_native_api_v8.h
, которого не существует в ~/.node-gyp/10.15.3/include/node
, поэтому я не нашел быстрого способа использовать env->context()
.
#include <v8.h>
// This asserts v8::Local<> will always be implemented with a single
// pointer field so that we can pass it around as a void*.
static_assert(sizeof(v8::Local<v8::Value>) == sizeof(napi_value),
"Cannot convert between v8::Local<v8::Value> and napi_value");
napi_status napi_create_date_by_v8(
double time,
napi_value* result
) {
v8::Isolate* isolate = v8::Isolate::GetCurrent();
v8::MaybeLocal<v8::Value> maybe_date = v8::Date::New(isolate, time);
v8::Local<v8::Value> local = maybe_date.ToLocalChecked();
*result = reinterpret_cast<napi_value>(*local);
return napi_ok;
}