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

133
Views
Cómo hacer llamadas API puras en JS

Ahora estoy leyendo "una guía en su mayoría adecuada para la programación funcional" del profesor Frisby, y me preguntaba cómo podemos hacer una búsqueda pura , y vi esta pieza de código aquí en el libro .

 const pureHttpCall = memoize((url, params) => () => $.getJSON(url, params));

Y dice

Lo interesante aquí es que en realidad no hacemos la llamada http; en su lugar, devolvemos una función que lo hará cuando se la llame. Esta función es pura porque siempre devolverá la misma salida dada la misma entrada: la función que hará la llamada http particular dada la url y los parámetros.

donde eso me dejó con cierta confusión, no entiendo cómo pureHttpCall ahora es puro y todavía tiene un código subyacente impuro (la parte de búsqueda).

Entonces, ¿qué me estoy perdiendo aquí que hace que el código sea puro y funcional ?

about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Lo que hace que la función sea pura es esto:

 memoize( ... )

La memorización es un tipo especial de almacenamiento en caché. Es posible que esté familiarizado con el almacenamiento en caché. Es decir, almacenas el resultado de una operación costosa en una variable y si esa variable ya existe devuelve el valor de esa variable en lugar de realizar la operación costosa. Memoizar es exactamente eso.

La principal diferencia entre memorizar y almacenar en caché es que memorizar es un caché permanente: el algoritmo de almacenamiento en caché más utilizado tiene un proceso de invalidación: podría estar basado en el tiempo (eliminar el caché si es anterior a x ), basado en el recuento (eliminar el caché si hay hay más de x elementos almacenados en caché), basado en la memoria (elimine el caché si el caché usa más de x megabytes de RAM), etc. La memorización nunca elimina el caché. Por lo tanto, la costosa operación se realiza una sola vez .

El hecho de que una operación se realice solo una vez hace que cada llamada a pureHttpCall garantice el mismo resultado. Esto significa que la función ahora es pura.

Sí, puede hacer lo mismo con Math.random() si lo memoriza haciendo que cada llamada a pureRandom devuelva exactamente el mismo número. Y esto haría pureRandom puro porque siempre devuelve el mismo resultado. Personalmente, no lo llamaría una función "aleatoria".

Una implementación muy simple de memoize podría ser algo como esto:

 function memoize (fn) { let cache; return function () { if (cache === undefined) { cache = fn(); } return cache; } }

El código anterior es 100 % síncrono para mayor claridad, pero es posible escribir una versión asíncrona de una función de memorización.

about 4 years ago · Juan Pablo Isaza Report

0

Según tengo entendido, el autor argumenta aquí que debido a que se agrega la capa de almacenamiento en caché, la función ahora tiene resultados predecibles:

Una vez que haya hecho una combinación de los argumentos de entrada, esa misma combinación siempre devolverá el mismo resultado que produjo la primera vez.

Entonces, si desconecta su cable de ethernet y hace pureHttpCall("http://google.com") , obtendrá una respuesta de error. Si ahora vuelve a conectar el cable, entonces pureHttpCall("http://google.com") aún producirá exactamente el mismo error que recibió la primera vez.

Sin embargo, no creo que esté de acuerdo, porque aquí hay una dependencia implícita. La función todavía depende del entorno cuando se llama por primera vez. Por ejemplo, si reinicia su programa entre desenchufar y volver a enchufar su cable ethernet, obtendrá resultados diferentes.

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!