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

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

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 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!