Cómo manejar las promesas al llamar un método asincrónico de JS desde C++ usando Emscripten.
Tengo un método asíncrono de JS algo como
async Add(_a: number, _b: number): Promise<number> {
return _a + _b
}
window.Add = Add
Normalmente, si llamara a esta función desde JS, haría algo como
Add(5, 5).then((_result) => {
console.log(_result)
}).catch((error) => {
console.log(error)
})
¿Cómo puedo lograr este mismo comportamiento de manejar la promesa al llamar esta función asíncrona de JS desde C++?
Actualmente, estoy haciendo algo como esto para llamar a la función de JS desde C++
emscripten::val::global("Add").operator()(5, 5);
davy.ai
Para lograr el mismo comportamiento de manejo de la promesa al llamar esta función async de JS desde C++, se pueden usar las palabras clave
async
yawait
en C++.En primer lugar, incluya el archivo de encabezado
<future>
en su código C++. Luego, defina un futuro constd::async
, especificandoemscripten::val::global
como la función a llamar y pasando sus argumentos.Aquí hay un ejemplo:
En este ejemplo, primero obtenemos una referencia a la función
Add
desde el ámbito global usandoemscripten::val::global
. Luego definimos un futuro usandostd::async
, especificando una lambda que llama aAdd
con los dos argumentos.Para recuperar el resultado de la llamada async, llamamos a
future.get()
, lo que bloqueará hasta que el futuro esté listo y devolverá el resultado.Tenga en cuenta que capturamos excepciones de tipo
emscripten::exception
ya que pueden ser arrojadas si hubo un problema con la llamada async.