Как передать несколько параметров в цепочку создания Ramda?
Вот четыре функции, которые я пытаюсь объединить в одну строку конечной точки:
const endpoint = str => `${str}` || 'default'
const protocol = str => `https://${str}`
const params = str => `${str}?sort=desc&part=true&`
const query = str => `${str}query={ some:'value', another:'value'}`
let finalEndpoint = R.compose(query, params, protocol, endpoint)
var result = finalEndpoint('api.content.io')
Эта композиция работает и возвращает желаемый результат:
https://api.content.io?sort=desc&part=true&query={ some:'value', another:'value'}
Но обратите внимание, как яжестко закодировано значения дляparams
а такжеquery
внутри их функции тела. Я вижу только одно значение, повышающееся значение в этомR.compose
цепь.
Как и где именно япередать параметры к параметрам и параметрам запроса?
ОБНОВИТЬ:
То, что я сделал, каррировало эти функции как это:
var R = require('ramda');
const endpoint = str => `${str}` || 'default'
const protocol = str => `https://${str}`
const setParams = R.curry ( (str, params) => `${str}?${params}` )
const setQuery = R.curry ( (str, query) => `${str}&query=${JSON.stringify(query)}` )
а потом
let finalEndpoint = R.compose(protocol, endpoint)
var result = setQuery(setParams(finalEndpoint('api.content.io'), 'sort=desc&part=true'), { some:'value', another:'value'})
console.log(result);
Но последний звонок, чтобы получитьresult
все еще кажется довольно взломанным и неэлегичным. Есть ли способ улучшить это?