2016-05-14 9 views
3

私はES6構文に慣れ始めました。矢印関数を使って変数に代入することが可能かどうかは疑問でした。私は基本的な軽量AJAXヘルパーライブラリを書いていると200の状況に、私は、現在をどうユーザにペイロードを返したい:ES6矢印関数を使用して変数を割り当てる

var responseData = ""; 
switch (payload.returnType.toLowerCase()) { 
    case "json" : responseData = JSON.parse(httpRequest.responseText); break; 
    case "text" : responseData = httpRequest.responseText; break; 
    default : responseData = null; break; 
} 
callback(null, responseData); 

これは素晴らしいですが、私は助けることができませんしかし、私がしなければ、私は、このクリーナーを作ることができると思う:

callback(null,() => { switch(payload.returnType.toLowerCase()) { ... }); 

私はしかし、私は慰めるときに印刷し、発信者からログインし、自分のコールバックで2番目のパラメータとして式の結果を送信するためにreturn文を期待しますswitchステートメント

は、代わりに私がやるしようとしている:この場合

var responseData =() => { 
    switch (payload.returnType.toLowerCase()) { 
     case "json" : return JSON.parse(httpRequest.responseText); break; 
     case "text" : return httpRequest.responseText; break; 
     default : return null; break; 
    } 
} 
callback(null, responseData); 

を、responseDataは常に空です。矢印関数の結果として戻り値を私の2番目のパラメータとして持つか、またはそれをresponseDataにバインドすることは可能ですか?

+1

機能を作成しますが、機能は実行しません。 – Laurence

+0

あなたは実際に何かを返さなければなりません。あなたが{}を使わないなら返す必要はありませんが、あなたの関数には()=> {}があるので、必要な値を返す必要があります。 –

+0

@NetaMetaはい申し訳ありません、私は私の答えの最初のブロックをコピーして貼り付けました。私は彼が代入する機能を返す必要があることを知っています:) – Alex

答えて

6

匿名関数を作成しますが、実行しません。例えば

var getResponseData =() => { 
    switch (payload.returnType.toLowerCase()) { 
     case "json" : return JSON.parse(httpRequest.responseText); 
     case "text" : return httpRequest.responseText; 
     default : return null; 
    } 
}; 
callback(null, getResponseData()); 
+0

良い補正。 –

+2

ありがとう、これは完全に働いていて、コールバックのパラメータ内でそれを実行したいのであれば、 '(()=> {...})();' – Alex

+1

はい、あなたは他の何かを好きになるでしょう。 –

0

私はあなたの直感が正しいと思うが、あなたは間違ったトラック、私見にしています。私はあなたがやりたいと思うことはコールバックに応答タイプのマップを作成することです:

let parsers = new Map([ 
    ["json", JSON.parse], 
    ["text", (text) => text], 
    ["_",() => null] 
]), t = payload.returnType.toLowerCase(); 

if (!parsers.has(t)) { 
    t = "_"; 
} 
callback(null, parsers.get(t)(httpRequest.responseText)) 

この主観的に「きれい」を作る何が実装からロジックを分離していることです。パーサ定義は、コードに影響を与えずにどこでも動かすことができます。そのため、スイッチのステートメントは「機能しない」(または非宣言的)と感じます。

もちろん、これはすべて趣味の問題です。

+0

非常に面白いジェラール、私は前にこの実装を考えていなかった...私はそれが好きです! – Alex

+0

これを使用すると、 'Iterator value json is entry objectではありません.'、 – Alex

+0

私は頭の上から入力しました。 (編集):ああ待って私はすでに最初のエラーが表示され、ペアも同様に配列で囲まれる必要があります。 –

関連する問題