2016-12-02 6 views
-2

私はこのコードをオンラインで見つけましたが、目的を理解できていないようです。 .mapメソッドが2回呼び出されたのはなぜですか?res変数は両方のメソッドで同じですか?このコードは何をしていますか? (.map and res)

login(email, password) { 
    let headers = new Headers(); 
    headers.append('Content-Type', 'application/json'); 

    return this.http 
     .post(
     '/login', 
     JSON.stringify({ email, password }), 
     { headers } 
    ) 
     .map(res => res.json()) 
     .map((res) => { 
     if (res.success) { 
      localStorage.setItem('auth_token', res.auth_token); 
      this.loggedIn = true; 
     } 

     return res.success; 
     }); 
    } 
+0

私は "ラムダ式"のための "=>"はJavaの " - >"だと考えています。これでマップの各要素に関数を作ることができます。 – RudiDudi

+0

duplicate http://stackoverflow.com/questions/34274520/ – enkryptor

答えて

2

オペレータ=>は、それが機能だけ短いバージョンですが、ラムダ式です。例えば、コードa => a * 10

function (a) { 
    return a * 10; 
} 

としてマップ機能がRxJSから来ているとまったく同じものです、あなたはそれhereについてのマニュアルを確認することができます。基本的には、返された値の値を "更新"するだけです。これらの2つの変数は同じで、前の操作で更新されただけです。

基本的に、お客様のコードは、/loginのメールにPOSTリクエストを作成し、メールとパスワードを含むJSONとしています。このリクエストの結果をJSONに編集し、結果としてres.successの値が真であるかどうかをチェックします。はいの場合はlocalStorageauth_tokenを格納しています。それ以外の場合は、スクリプトを続行して、res.successの値を返します。

+0

私は本当にありがとうございます。だから、.map(res => res.json())は応答がjson形式に変換され、次に 'res ' res.json()の「res」がResponseを意味する場合、このコードの前に定義する必要はありませんか?私はこのコードの前に 'res'が見当たらなかった。だから、私はそれほど明確ではなかった。このjson形式の 'res'にauth_tokenキーがありますか?ありがとうございました。 –

+0

これはまさにこれです。 – Sakuto

+0

res => res.json()で正しくありがとうございます。最初のresにはjsonのフォーマットされた値があり、2番目のresは 'Response'ですか? –

関連する問題