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

222
Vistas
Problemas sin puntos de Ramda con funciones de transformación (mapa, etc.)

Tengo esta función, que básicamente es mapear parámetros de solicitud y parámetros de consulta a una declaración SQL:

 function selectSingleResult(params, { order, limit, offset, fields, runset_id, txOffset, txFactor }) { const transformer = R.when(R.equals('values'), R.compose(knex.raw.bind(knex), applyConversion({ txOffset, txFactor }))) const newFields = R.map(transformer , fields); knex('myTable').select(...newFields) // etc...

Idealmente, me gustaría poder definir el transformer fuera de la función para que la función pueda convertirse en:

 const mapFields = R.map(transformer); function selectSingleResult(params, { order, limit, offset, fields, runset_id, txOffset, txFactor }) { knex('myTable').select(...mapFields(fields)) // etc...

El problema es que la función applyConversion necesita argumentos dados a selectSingleResult .

Este es un problema común que tengo con las funciones de transformación para map . A menudo requieren parámetros distintos de los valores que se asignan. En tales casos, ¿cómo puedo escribir sin puntos, o al menos con un estilo más comprobable y no terminar anidando tanto las funciones?

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

0

Se siente como si estuviera tratando de ir sin puntos en el código donde no tiene mucho sentido. Pero hay una noción contrastante de desestructurar un gran conjunto de campos del segundo parámetro que no parece necesario, por lo que parece confuso. (En realidad, podría ser necesario: tal vez esté usando order , limit , offset y runset_id en el resto de su función principal).

Creo que puede lograr casi lo que está pidiendo simplemente introduciendo una capa más de llamadas, con algo como esto:

 const transformer = (query) => R .when (R .equals ('values'), field => knex .raw (applyConversion (query) (field))) const mapFields = R.pipe (transformer, map) const selectSingleResult = (params, query) => { knex ('myTable') .select (... mapFields (query) (query .fields)) // etc... }

Nombro el segundo parámetro para su query de función principal; es una conjetura, y si eso es confuso, reemplace todas las instancias de query con foo o con algo significativo para usted.

Tenga en cuenta que mapFields también podría escribirse como const mapFields = (query) => R.map (transformer (query)) , pero la versión anterior parece más simple. También tenga en cuenta que simplifiqué un poco el transformer . Simplemente no veo ninguna razón para tratar de ir sin puntos, cuando no puedes llegar hasta allí. Y tratar de mezclar código sin puntos con construcciones OO como knex .raw parece confundir las cosas.

Si leo el código correctamente, también podríamos reescribir el transformer de esta manera:

 const transformer = (query) => (field) => field == 'values' ? knex .raw (applyConversion (query) ('values')) : field

pero no puedo decidir si eso es una mejora o no.

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