新鮮な視点の周り
それは我々が我々のプログラミング言語を曲げたものであることを自分自身を思い出させるために良いことだ、ではない他の方法
私は、あなたが間違った経路。 fetchBin
は、私たちが本当に探している男のストローマンです。 URLをとり、解析されたJSONレスポンスを返す関数が必要です。 fetchJSON
があるから、私たちはfetchJSON
を使用してfetchBin
を実装する、のは、この男を呼び出してみましょう - リソースが404
状態または間違ったコンテンツタイプで200
ステータスを返すかどうかは関係ありません(下記のXMLの例を参照) - のいずれかの方法をその約束はエラーハンドラ(console.error
の下、あるいは.then(console.log).catch(console.error)
)に正しくルーティングされます。ここでのポイントは、明確ではない場合は、fetchBin
はHTTPステータスコードの内容レスポンスのContent-Typeヘッダーは、解析されたJSONを要求し、残りの部分について心配することを止めさせます。
これを共有する理由は、あなたが特定の考え方にこだわらないようにすることです。 R.cond
はかなりの形で、の形式です。正直なところ正式な言い方をすると、プログラムのフォークの意味を配列でケージングし、プログラムでは決して使用できない条件分岐を保持するようにサンクを作成します。 true怠惰は、厳密に評価されたJavaScriptでのみ利用可能です。if/else
または?:
です。一体、私たちもR.pipe
、またはR.pipeP
、またはR
ですべてを必要としてしまうなかった - それらなしであなたはまだ私たちがR.cond
のような硬質のフォームから自分のバインドを解除すると
、物事はかなり自然に一緒に収まるよう、不要な仕事をやっています。 ..
const fetchJSON = url =>
fetch (url)
.then (responseOK)
.then (parseJSON)
const responseOK = (response) =>
{
if (response.status >= 200 && response.status < 300)
return response
else
throw Object.assign (Error (response.statusText), { response })
}
const parseJSON = response =>
response.json()
const fetchBin = (url) =>
fetchJSON ('https://httpbin.org' + url)
fetchBin ('/anything?a=b') .then (console.log, console.error)
// all things good !
// => { args: {a: 'b'}, data: '' ... }
fetchBin ('/status/404') .then (console.log, console.error)
// non-200 status goes to error handler
// => { Error: NOT FOUND ..., response }
fetchBin ('/xml') .then (console.log, console.error)
// bad JSON goes to error handler
// => SyntaxError: Unexpected token < in JSON at position 0
[OK]をので、私たちはそこR
が、この答えを必要としませんでしたそれを一般的な経験則として暗示することを意味するものではありません。Ramdaは優れたツールであり、関数型プログラミングについて多くのことを教えてくれることがあります。ちょっと前に戻ってプログラムを表現できるかどうかを評価してください。あなたは言語(ライブラリ、またはfunction; R.cond
)が必要です
Ramadaのドキュメントによれば、述語は 'cond'の純粋な関数であるはずなので、' testStatus'の 'then'の中に' testCond'部分があるべきだと思います。 –