Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

302
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!