电子应用程序冻结,直到整个NAPI回调函数结束

时间:2019-03-21 21:52:18

标签: javascript c++ node.js node-addon-api

我在Javascript中有一个按钮,该按钮传递了一个将UI修改为我的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秒钟,然后一起打印ImmediatePost delay

我如何使其立即打印Immediate,休眠/执行长时间运行的任务,然后再打印Post delay

0 个答案:

没有答案