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.

Llamar a una función de objeto en RequireJS

Utilizo RequireJS para cargar algunos scripts.

Ahora me gustaría crear algunos métodos propios que también necesitan el script cargado. He intentado muchas cosas, pero siempre obtengo “Uncaught (in promise) ReferenceError: hd no está definido”. Ambos scripts están cargados en mi index.html.

Llamando al método ‘connect’ desde main.js

hd.connect.call(token);

socket-workers.js

...
require.config({

shim: {
    'socket.io': {
      exports: 'io'
    },
    'socket.io-stream': {
      exports: 'ss'
    }
  },
  paths: {
    'socket.io': WEBSOCKET_PROXY_HOST + '/socket.io/socket.io',
    'socket.io-stream': WEBSOCKET_PROXY_HOST + '/socket.io-stream/socket.io-stream'
  },
  waitSeconds: 1

});

requirejs([
  'socket.io', 'socket.io-stream'
], function(io, ss) {

  // Configurar Métodos y Eventos

  const hd = {

    connect : function(token) {
      // Conectar al Socket, Proxy Server y autenticar
      socket = io(WEBSOCKET_PROXY_HOST, {
        auth: {
          token: token
        }
      }).on('connect', function(data) {
        socketConnected = true;
        isStreaming = false;
        console.log('conectado al socket');
        if (activeRecording) {
          // iniciarGrabación();
        }
      });
...
Tags:  ,

Answer

  1. Avatar for davy.ai

    Para poder utilizar el objeto hd y su método connect desde main.js, asegúrese de que el objeto hd esté disponible en el ámbito global. Una forma de lograr esto es devolviendo el objeto hd desde la función de devolución de llamada requirejs en socket-workers.js.

    Aquí tienes un ejemplo de cómo puedes modificar socket-workers.js para lograr esto:

    ...
    require.config({
      shim: {
        'socket.io': {
          exports: 'io'
        },
        'socket.io-stream': {
          exports: 'ss'
        }
      },
      paths: {
        'socket.io': WEBSOCKET_PROXY_HOST + '/socket.io/socket.io',
        'socket.io-stream': WEBSOCKET_PROXY_HOST + '/socket.io-stream/socket.io-stream'
      },
      waitSeconds: 1
    });
    
    let hd; // declara hd en el ámbito global
    
    requirejs([
      'socket.io', 'socket.io-stream'
    ], function(io, ss) {
    
      // Configurar Métodos y Eventos
    
      hd = {
        connect: function(token) {
          // Conectar al socket, servidor proxy y autenticar
          socket = io(WEBSOCKET_PROXY_HOST, {
            auth: {
              token: token
            }
          }).on('connect', function(data) {
            socketConnected = true;
            isStreaming = false;
            console.log('conectado al socket');
            if (activeRecording) {
              // startRecording();
            }
          });
      };
    
      // Devolver el objeto hd para que esté disponible en el ámbito global
      return hd;
    
    });
    
    // Ahora, desde main.js, puedes llamar a:
    hd.connect.call(token);
    

    Con esta modificación en socket-workers.js, el objeto hd se devuelve desde la función de devolución de llamada requirejs y está disponible en el ámbito global. Esto te permite llamar al método connect desde main.js sin obtener el ReferenceError para hd.

Comments are closed.