2016-06-15 3 views
0

私は、フロントエンドを角度で作成しており、Railsでバックエンドを作っています。 Angular側では、多くのHTTPリクエストを送信します。アプリが適切な方法で動作することを確認するために、リクエストが発生することがあります。アングルで順番に非同期呼び出しが行われるようにする

私の研究に基づいて、人々はこの理由で約束をしています。これは本当ですか?前の行動が完全に完了し、応答が戻った後に起こることを約束しますか?

私の例を見てみましょう。

私はアプリケーションオブジェクトを返す約束を持っています。それがlocalStorageに存在しない場合、私のアプリはリモートサーバーからフェッチします。

ApplicationModule.get = function() { 

      if (!localStorage.application) { 
       return Restangular.all('session').one('user').get().then(function (response) { 
        application = { 
          "id": response.current_application_id, 
          "user_id": response.id, 
          "_type": response.current_type 
         } 
        localStorage.setItem("application", JSON.stringify(application)); 
        return application 
       }); 
      } else { 
       return $q.resolve(JSON.parse(localStorage.application)); 
      } 
    } 

    return ApplicationModule; 
}]); 

私の他のコントローラでは、次のように機能を利用します。私は基本的にApplicationModule.get()から応答を返す必要があり、それを次の関数somefunctionのパラメータとして使用します。

 ApplicationModule.get().then(function (response) { 
      somefunction(response); 
     }) 

私は好奇心が強い、私は約束を使用する場合return Restangular.all('session').one('user').get().then(function (response)がApplicationModule.getで行われた後、somefunction()が常に呼び出されるということですか()?

答えて

0

jqueryの$.ajaxを使用している場合、既にthenメソッドを使用できるPromiseを返します。

しかし、約束は注文のためのものではなく、非同期計算のためのものです.AJAXは非同期(「A」に気付く)なので、$.ajaxがプロミスを返すのは論理的です。

最初のものが成功したときにその結果が2番目のものに渡されるなど、主な用途ではないように、チェーン化することができます。

主な用途は非同期コンピューティングで、thenメソッドが存在するのは、最初の結果と別の非同期操作を行う必要があることがあるためです。

シンクロナイズドコンピューティングを注文する必要があるときは、使用するべきではありませんが、それは完璧なアイデアです。

+0

これまでの結果と何か関係がある場合、複数の非同期コンピューティングの目的で約束が使用されていますか?そして私は正しい方法でそれをやっていますか? – JoHksi

+0

はい、あなたは正しいことをやっています。ajaxは非同期であると考えられていますが、約束事は1つの計算にも使えます – niceman

関連する問題