Вызов функции 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.