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

215
Vistas
intenté recrear la función _.once pero solo funciona en al menos 2 iteraciones, no en una
onceCopy function (testFunc) { const copyFunc = (a) => { const copyFunc2 = (b) => { return testFunc(a); }; return copyFunc2; }; return copyFunc; };

Entonces, la función devuelve la función interna en la primera invocación.

Luego devuelve la función interna de la función interna de la segunda invocación.

Luego, la segunda función interna (tercera invocación) en realidad devuelve el argumento pasado en la función principal y solo lo invoca con el carácter que le dimos en la segunda invocación.

Idealmente, quiero lograr lo que estoy logrando en muchas invocaciones después de solo la primera, si eso tiene sentido.

Editar: Sí, lo siento, _.once.

Editar: así que la primera invocación una vezCopia DEBE contener una copia del Func pasado La segunda invocación DEBE desencadenar la copia y da una salida La tercera invocación DEBE dar el resultado de la segunda invocación al igual que la cuarta, quinta, sexta y así sucesivamente...

Mi función hace esto, pero en la segunda invocación almacena una función (copyFunc2) nuevamente, pero lo hice porque necesito un lugar para almacenar "a".

así como tenemos

function multiplyBy3 (a) {return a*3} y luego, una vez que la copia almacena una copia de multiplicar por 3

const actualFunction = onceCopy(multiplyBy3)

luego en la segunda y tercera invocación lo que quiero

FunciónActual(1) = 3 FunciónActual(66) = 3

entonces la función pasada SOLO FUNCIONA UNA VEZ

No puedo explicar más que esto, está en los documentos de lodash.

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

0

Después de llamar a la función por primera vez y obtener el resultado, cree una nueva función que devuelva el resultado y utilícela siempre que se llame a la función envuelta:

 const once = fn => { let func return (...args) => { if(func) return func() const result = fn(...args) func = () => result return result } } const multiply = (a, b) => a * b const demoFunction = once(multiply) console.log(demoFunction(1, 2)); // 2 console.log(demoFunction(3, 4)); // 2 console.log(demoFunction(5, 6)); // 2

about 4 years ago · Juan Pablo Isaza Denunciar

0

No estoy familiarizado con la función que está tratando de volver a implementar, así que siéntase libre de corregirme si entendí mal. Para envolver una función y asegurarse de que solo se llame una vez, no necesita múltiples envoltorios anidados, solo uno con algún estado.

Debe realizar un seguimiento de si ya tiene un resultado para devolver ( hasResult ) y, de ser así, cuál es ese resultado ( result ). Mantener estas dos variables separadas le permite cubrir el caso cuando el result no está undefined mientras mantiene el código fácil de leer y comprender.

 function once(wrappedFunction) { let hasResult = false; let result; return (...args) => { if (hasResult) { return result; } result = wrappedFunction.apply(this, args); hasResult = true; return result; } } // An example function to wrap function multiply(a, b) { return a * b; } const demoFunction = once(multiply) console.log(demoFunction(1, 2)); // 2 console.log(demoFunction(3, 4)); // 2 console.log(demoFunction(5, 6)); // 2

about 4 years ago · Juan Pablo Isaza Denunciar

0

Esto es lo que estabas buscando?

El retorno de la función inicial se mantiene en llamadas posteriores. Utilicé una segunda variable called en caso de que la primera llamada devuelva indefinido, que también debería devolverse en llamadas posteriores.

 const once = (onceFn) => { let called; let value; return (...args) => { if (called) return value; called = true; return (value = onceFn(...args)); }; }; function multiplyBy3(a) { return a * 3; } const fn = once(multiplyBy3); console.log(fn(3)); // 9 console.log(fn(66)); // 9
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