Приложение Electron зависает, пока не завершится вся функция обратного вызова NAPI
У меня есть кнопка в Javascript, которая передает функцию, которая изменяет пользовательский интерфейс моего модуля NAPI, который будет использовать ее несколько раз в течение долгого времени выполнения задачи.
Базовая настройка:
Javascript:
let $ = require('jquery')
var myModule = require('myModule') //defined in package.json
function addToText(msg) {
$('#outputTxt').prepend(msg + "<br/>")
}
$('#myBtn').on('click', () => {
myModule.napiTest(addToText);
})
В моей оболочке NAPI:
void napiTextCallback(const char* charRet, napi_value cb, napi_env env, napi_value global) {
napi_value args[1];
NAPI_CALL_WITH_CHECK(napi_create_string_utf8, env, charRet, NAPI_AUTO_LENGTH, args);
napi_value result;
NAPI_CALL_WITH_CHECK(napi_call_function, env, global, cb, 1, args, &result);
}
napi_value napiTest(napi_env env, napi_callback_info cbinfo) {
size_t argc = 1;
napi_value argv[1];
NAPI_CALL_WITH_CHECK(napi_get_cb_info, env, cbinfo, &argc, argv, nullptr, nullptr);
napi_value cb = argv[0];
napi_value global;
NAPI_CALL_WITH_CHECK(napi_get_global, env, &global);
string text = "Immediate";
napiTextCallback(text.c_str(), cb, env, global);
usleep(5000000);
text = "Post delay";
napiTextCallback(text.c_str(), cb, env, global);
return nullptr;
}
//exporting and all that omitted
Когда я запускаю код, после нажатия на кнопку он просто останавливается на полные 5 секунд, а затем печатает Immediate
а также Post delay
все вместе.
Как мне сделать это печать Immediate
немедленно, спать / выполнить долгосрочное задание, а затем распечатать Post delay
после?