Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

301
Vistas
¿Cómo fusionar 2 funciones serializables en 1 función serializable en JS?

Como sabe, hay ciertos casos (por ejemplo, uso en trabajadores) en los que las funciones deben ser serializables (y, por otro lado, deserializables, por supuesto). Tengo un caso así; una función de biblioteca (es decir, no puedo cambiarla) doSomething(serializableFunction) espera tal función de mí. También espera que serializableFunction acepte 1 parámetro x y le dé x .

Hasta ahora, esto no fue un problema para mí; Tenía una función f(x) de otra biblioteca que cumplía con mis propósitos (así que solo llamé a doSomething(f) hasta ahora). Pero ahora, tengo una segunda función serializable g(x) , también de una biblioteca, y quiero que la función que le doy a doSomething se ejecute ya sea f o g , dependiendo de x . Así que probé:

 doSomething(function h(x) { if (x < 5) return f(x); else return g(x); });

Esto funcionaría bien sin serialización, pero con él, se arroja un error, por supuesto, porque h ya no es serializable: ¡Llama a f y g , que ya no se conocen en el momento de la deserialización!

Así que actualmente estoy haciendo:

 doSomething(eval(`function h(x) { const f = ${f.toString()}; const g = ${g.toString()}; if (x < 5) return f(x); else return g(x); }`));

¡Esto funciona, pero es una pesadilla! Entonces, mi pregunta es: ¿hay algún enfoque mejor para fusionar 2 funciones serializables (como f y g ) en 1 función que también sea serializable? Tenga en cuenta que no puedo cambiar ninguno de f , g o doSomething , solo h !

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Pienso en una solución que reemplace eval con new Funciton . No es el mejor, pero un poco mejor.

Ejemplo a continuación:

 function f(a) { console.log("f", a); } function g(b) { console.log("f", b); } function doSomething(func) { const y = 1; func(y); } const funcBody = `return function () { const f = ${f.toString()}; const g = ${g.toString()}; if (x < 5) return f(x); else return g(x); }()`; const func = new Function("x", funcBody); doSomething(func);

O puede agregar algo de abstracción como a continuación:

 function f(a) { console.log("f", a); } function g(b) { console.log("f", b); } function doSomething(func) { const y = 1; func(y); } const getFuncArray = (name = "x") => [ name, `return function () { const f = ${f.toString()}; const g = ${g.toString()}; if (${name} < 5) return f(${name}); else return g(${name}); }()`, ]; const res = new Function(...getFuncArray()); doSomething(res);

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda