es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

En un método JS, se llama al método DLL nativo. La ejecución de la DLL retorna, y a veces no se ejecuta el resto del código JS del método?

Tengo un método de JS, como este:

function jsmethods(){

  //ejecutar código js
  int i = 0;
  i++;

  //llamar a dlls
  let controller = document.getElementById("ocxControllerId");
  let nativeRes = controller.nativeMethods("algunos argumentos");

  //continuar ejecutando código js
  let res = {"nativeResult":nativeRes};
  return res;
 }

La lógica de las dll’s de activeX puede ser así:

native nativeRes nativeMethods(){
  mostrar una ventana de Windows con un botón ok;
  esperar al usuario a que presione el botón ok;
  //Puedo ver que después de este momento, el motor js continúa ejecutando otro código js
  if (el usuario presiona el botón ok){
  // después de este momento, el motor js deja de ejecutar otro código js
     while(1){
       obtener estado del hardware
       si (estado == valor){
          break;
       }
     }
 }
  return nativeRes;
}

A veces, cuando llamo a jsmethods(), después de que el código nativo termine y se registre en los logs, jsmethods no continúa ejecutando el código js restante, y en ese momento, el motor js puede ejecutar otros métodos js. Estoy usando el framework Vue.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Basándonos en la información proporcionada, parece que el problema es que la función jsmethods() no siempre continúa ejecutando el resto del código JavaScript después de que la llamada a nativeMethods() se completa.

    Esto podría deberse a que la función nativeMethods() está abriendo una ventana y esperando la entrada del usuario antes de continuar la ejecución. Es posible que la ventana no se esté cerrando correctamente o que haya una demora en la verificación del estado del hardware que esté causando que la función se bloquee.

    Para resolver este problema, podría intentar implementar la gestión de errores en la función jsmethods() para capturar cualquier error que pueda ocurrir durante la ejecución del código nativo. Además, podría intentar cerrar la ventana después de recibir la entrada del usuario y asegurarse de que la verificación del estado del hardware esté funcionando correctamente y no esté causando demoras.

    En cuanto al hecho de que el motor de JavaScript continúe ejecutando otros métodos, esto probablemente se debe a la naturaleza asíncrona de JavaScript. Cuando una función está esperando una entrada, el motor de JavaScript puede seguir ejecutando otro código hasta que se reciba la entrada y la función reanude la ejecución. Este es un comportamiento normal para JavaScript y no debe ser motivo de preocupación.

Comments are closed.