Вызов функции JS несколько раз из аддона узла - PullRequest
0 голосов
/ 14 марта 2019

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

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

Не удалось найти какие-либо четкие ответы или примеры нав интернете о том, как это сделать, ищите советы.

Оригинал:

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

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

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

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

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

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

1 Ответ

0 голосов
/ 14 марта 2019

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

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

/usr/bin/node yourjsfunctionfilehere.js

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

...