2016-12-30 111 views
0

這是我第一次嘗試用Ramda進行函數式編程。我正在嘗試通過組合多個函數來構建api端點字符串。如何使用拉達與兩個以上的功能?

這工作:

const endpoint = str => str && str.toUpperCase() || 'default' 
const protocol = str => `https://${str}` 
let finalEndpoint = R.compose(protocol, endpoint) 

var result = finalEndpoint('api.content.io') 

結果是現在https://API.CONTENT.IO預期

但現在我要更多的功能添加到這個管道:

const params = val => `?sort=desc&part=true` 
const query = val => `query={ some: value, another: value}` 

但是,當我嘗試撰寫一切一起像這樣:

let finalEndpoint = R.compose(protocol, endpoint, params, query) 
var result = finalEndpoint('api.content.io') 

我只是得到https://?SORT=DESC&PART=TRUE而我想

https://API.CONTENT.IO??sort=desc&part=true&query={ some: value, another: value}

什麼樣的組合鏈接和組成做我用它來得到上面的結果呢?

回答

1

可能很熟悉Ramda用戶這方面的一個變化將是匿名函數管道寫這篇文章:

const finalEndpoint = pipe(
    or(__, 'default'), 
    concat('https://'), 
    concat(__, '?sort=desc&part=true&'), 
    concat(__, 'query={ some: value, another: value}') 
) 

finalEndpoint('api.content.io'); 
//=> https://api.content.io?sort=desc&part=true&query={ some: value, another: value} 

這樣一個無點的版本可能會或可能不會符合您的口味,但這是一個有趣的選擇。

+0

這是優秀的@Scott,但你能幫我刪除硬編碼的參數,仍然保持功能? http://stackoverflow.com/questions/41404875/how-do-i-pass-in-multiple-parameters-into-a-ramda-compose-chain –

+0

我回答了[你的其他問題](http:// stackoverflow .COM /問題/ 41404875)。 –

0
var R = require('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') 

console.log(result) 

原來我沒有使用str參數正確