Вызов функции JS несколько раз из аддона узла

Редактировать: по-видимому, это не ясно, думаю, я сделаю это более кратким.

Приложение Node построено, использует родной аддон. Мне нужно передать функцию Javascript из этого проекта через node-addon-api в мой аддон C++. Затем мне нужно иметь возможность вызывать эту функцию из C++ несколько раз. Проблема возникла, когда я обнаружил, что не могу сохранить ссылку на функцию Javascript из-за того, что napi_env (необходимый для вызова функции) защищен от кэширования.

Не удалось найти четких ответов или примеров в интернете относительно того, как это сделать, в поисках советов.

Оригинал:

как описывает заголовок, мне нужно найти способ вызова функции JS несколько раз в моем аддоне. Общий вариант использования заключается в том, что мой аддон выполняет некоторые длительные команды и должен периодически отправлять обновление статуса обратно в javascript.

Я подумал, что лучшим подходом было бы передать пользователю функцию (которая просто добавляет к текстовому блоку) для вызова моего аддона (чтобы он мог записывать обновления), таким образом сторона JavaScript может решить, где он будет отображаться.

Я экспериментировал, чтобы заставить это работать. Выяснилось, что мой оригинальный способ сохранения функции в постоянном значении napi_value не работает, поскольку вы также не можете сохранить napi_env.

Я нашел эту ветку, которая, как мне кажется, ближе всего к тому, что мне нужно, но мне не удалось перевести Nan на napi_, чтобы он работал с тем, что я использую. Функция обратного вызова NodeJS Javascript из многопоточного аддона C++

Также попытался передать EventEmitter, но проблема, аналогичная описанной выше.

Кто-нибудь может дать несколько указаний, если я иду в правильном направлении? Возможно, помогите мне найти несколько примеров того, как этого добиться?

1 ответ

Ваш вопрос не ясен. Предполагая, что вы используете Javascript в Node, взгляните на FFI, который позволяет загружать и вызывать динамические библиотеки с использованием Javascript.

В качестве альтернативы можно просто выполнить функцию из командной строки следующим образом:

/usr/bin/node yourjsfunctionfilehere.js

Вы также можете передать параметры командной строки в вызываемую функцию JS.

Другие вопросы по тегам