2017-08-15 23 views
0

私はちょうどAngular 2でアプリケーションを実装し始めました。以下のコードについていくつか質問があります。そのauthenticateメソッドでただboolean型の代わりにObservableを返すのはなぜですか?私が専門家からのソースコードを見ると、彼らはObservableとしてそれらのほとんどを返します。私はこれが愚かな質問かもしれないと思うが、私はそれについて興味がある。なぜreturn型Observableがプリミティブ型より優れていますか?

authenticate(user: string, pass: string): Observable<boolean> { 
     return this.http.request(new Request({ 
      method: RequestMethod.Post, 
      url: this.baseUrl + "login", 
      body: { name: user, password: pass } 
     })).map(response => { 
      let r = response.json(); 
      this.auth_token = r.success ? r.token : null; 
      return r.success; 
     }); 
    } 

答えて

0

内部関数と呼ばれるHTTPリクエストは非同期であり、応答がクライアントに到達するまでに時間がかかることがあります。オブザーバブルは、応答を待って何かを実行する特権を与えます。

例:このブール値を直接返すとしましょう。httpリクエストが返すレスポンスを待たないため、常にnull値が返されます。

+0

本当に?私は非常に古いテストでブール型を返すように実装しました。それはnull値を返さないようにうまくいきました... –

+0

あなたのプログラムを実行している間、応答が戻り値の前に来るならば、あなたはブール値を持ちます。それはあなたのネットワークの速度におそらく問題を気づかないローカルdev環境に依存します。これがあまり明確ではないと思われる場合は、コードを共有してより明確にすることができます。これはいくつかの[Observables](http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html) –

+0

私はあなたの優しい説明をいただきありがとうございます。 –

1

httpリクエストを使用しているほとんどすべてのメソッドで、observablesが返されます。

これは、Httpリクエスト(ネットワーク)リクエストが本質的に非同期であるためです。つまり、ネットワーク要求をするときに、コールスタック内で応答を処理する必要があるときはわかりません。応答はネットワーク速度、API効率、干渉などに依存します。

なぜ観測可能なのですか?彼らはに登録されています!あなたは応答が来るときにそれらを購読します。 Rxjsには、レスポンスの構文解析やエラーのない、よりクリーンで快適な操作を行う演算子がたくさんあります。

オンラインで見つかったいくつかのRxjsの例を参照することをおすすめします。オブザーバブルは超強力です。彼らは、あなたのアプリの状態、データアクセス層、ビュー、およびその間のすべてを管理することができます。

rxjsサイトでrxのドキュメントとビジュアルを確認してください。 http://reactivex.io/

+0

良い例を教えてください。 –

+0

https://embed.plnkr.co/eRaCT7AqNNPIHpD3sCG0/これにはrxjsがインポートされているので、script.jsページでrxjsの練習をすることができます。またはより角度のあるフレンドリなタイスクリプト版:http://embed.plnkr.co/OdggjhnwjQLSwhYAjg8H – Everett

0

「それは観測可能です」と言うと、「最終的にこのタイプの価値が戻ってきます」と言うことができます。時間の経過とともに値のストリームが通過することができるため、すべての非同期http要求に使用することが好ましい理由です。マップ関数も観測可能な値を返します。したがって、真っ直ぐ上のブール値を返そうとすると、不必要な作業が必要になります。マップ(...)は.promise()より優先されます(...)

関連する問題