C++ 中的 Emscripten await 运算符。 Returns 未定义而不是字符串值
Emscripten await operator in C++. Returns undefined instead of string value
我的 main.cpp.
中有这个函数“IsBrave”
如果浏览器包含 navigator.brave
它调用 navigator.brave.isBrave()
函数等待。
但是当从浏览器的控制台调用导出函数时,它会在 Brave 浏览器上打印 undefined 值而不是 "Brave"。在其他浏览器中,结果是 "Unknown".
已在 Brave 浏览器的控制台中测试
> var x = await navigator.brave.isBrave(); console.log(x);
true
>var y = Main.Module.IsBrave(); console.log(y);
undefined
It's Brave.
期望输出
> var x = await navigator.brave.isBrave(); console.log(x);
true
>var y = Main.Module.IsBrave(); console.log(y);
It's Brave.
true
我在 return val(u8"Brave") 之前打印了一些东西,没问题。但是在浏览器的控制台中得到 undefined 值。
欢迎任何帮助。谢谢。
int main()
{
}
emscripten::val IsBrave()
{
using namespace emscripten;
bool isBrave = !!val::global()[u8"navigator"][u8"brave"] && !!(val::global()[u8"navigator"][u8"brave"].call<val>(u8"isBrave").await());
if(isBrave)
{
std::cout<< "It's Brave." << std::endl; // PRINTED OK
return val(u8"Brave"); // GET undefined in BROWSER
}
else
{
return val(u8"Unknown");
}
}
EMSCRIPTEN_BINDINGS(exports)
{
using namespace emscripten;
function<val>(u8"IsBrave", &IsBrave);
}
编译为
em++.bat `
main.cpp `
-I ../CppInclude `
-I Include `
-o Module.js `
-std=c++17 `
--bind `
-s WASM=1 `
-s DISABLE_EXCEPTION_CATCHING=0 `
-s SINGLE_FILE=0 `
-s ASYNCIFY=1 `
-s VERBOSE=0 `
-O2 `
--profiling `
-s EXPORT_NAME=`'CreateModuleInstance`' `
-s MODULARIZE=1 `
-s EXPORTED_FUNCTIONS=[`'_main`'] `
-s EXTRA_EXPORTED_RUNTIME_METHODS=[`'ccall`',`'cwrap`',`'lengthBytesUTF8`',`'stringToUTF8`'] `
--pre-js "Js/Pre_Compiled.js" `
--post-js "Js/Post_Compiled.js" `
--extern-post-js "Js/ExternPost_Compiled.js" `
--extern-pre-js "Js/ExternPre_Compiled.js" `
用这个例子解决了EmbindAsync
我的 main.cpp.
中有这个函数“IsBrave”
如果浏览器包含 navigator.brave
它调用 navigator.brave.isBrave()
函数等待。
但是当从浏览器的控制台调用导出函数时,它会在 Brave 浏览器上打印 undefined 值而不是 "Brave"。在其他浏览器中,结果是 "Unknown".
已在 Brave 浏览器的控制台中测试
> var x = await navigator.brave.isBrave(); console.log(x);
true
>var y = Main.Module.IsBrave(); console.log(y);
undefined
It's Brave.
期望输出
> var x = await navigator.brave.isBrave(); console.log(x);
true
>var y = Main.Module.IsBrave(); console.log(y);
It's Brave.
true
我在 return val(u8"Brave") 之前打印了一些东西,没问题。但是在浏览器的控制台中得到 undefined 值。
欢迎任何帮助。谢谢。
int main()
{
}
emscripten::val IsBrave()
{
using namespace emscripten;
bool isBrave = !!val::global()[u8"navigator"][u8"brave"] && !!(val::global()[u8"navigator"][u8"brave"].call<val>(u8"isBrave").await());
if(isBrave)
{
std::cout<< "It's Brave." << std::endl; // PRINTED OK
return val(u8"Brave"); // GET undefined in BROWSER
}
else
{
return val(u8"Unknown");
}
}
EMSCRIPTEN_BINDINGS(exports)
{
using namespace emscripten;
function<val>(u8"IsBrave", &IsBrave);
}
编译为
em++.bat `
main.cpp `
-I ../CppInclude `
-I Include `
-o Module.js `
-std=c++17 `
--bind `
-s WASM=1 `
-s DISABLE_EXCEPTION_CATCHING=0 `
-s SINGLE_FILE=0 `
-s ASYNCIFY=1 `
-s VERBOSE=0 `
-O2 `
--profiling `
-s EXPORT_NAME=`'CreateModuleInstance`' `
-s MODULARIZE=1 `
-s EXPORTED_FUNCTIONS=[`'_main`'] `
-s EXTRA_EXPORTED_RUNTIME_METHODS=[`'ccall`',`'cwrap`',`'lengthBytesUTF8`',`'stringToUTF8`'] `
--pre-js "Js/Pre_Compiled.js" `
--post-js "Js/Post_Compiled.js" `
--extern-post-js "Js/ExternPost_Compiled.js" `
--extern-pre-js "Js/ExternPre_Compiled.js" `
用这个例子解决了EmbindAsync