2016-11-20 7 views
1

すべて、 私はAngularフレームワークの初心者で、$ httpサービスを読んでいます。私は以下の質問が私の心を盛り上げるまでAngular JSのPromiseオブジェクトを理解したと思った。私の理解を助けてくれますか?

- AngularからREST呼び出しを実行すると、Angularワークは、REST APIが呼び出されたjsの他のステップを実行する前に、残りの呼び出しを実行しません。これはシングルスレッド化されているためです。さて、私はこれを取得します。では、いつREST呼び出しを実行しますか?現在のJSのすべての指示が完了した後かもしれませんか?はいの場合、

  • なぜ非同期とも呼ばれますか?
  • 第2に、REST APIを実行している間(REST APIの結果が2秒前に出力されていないとします)、REST APIを呼び出した直後にAngularは何もせずに2秒待っていますか?

$ HTTPサービスが非同期とすぐに、それはそれを見ているようREST APIを実行した場合、

RESTのAPIを実行するための第二のスレッドを生成します
  • ?枠組み?もしそうなら、Javascriptはもはやユニスレッドではないのですか?
  • メインスレッドがjs内のすべての行の実行を完了していない間にサービスが戻るとき、Angular/jQueryは.then関数でコード化された命令を実行して実行します。

ありがとうございました!

プレム

+0

「*私たちは電話をかけないでください」とはどういう意味ですか?まだシングルスレッド。応答スレッドは、アクティブなスレッド処理がクリアされているときに処理されます。 – charlietfl

+0

@charlietfl今質問を更新しました。これは明白です – InfiniteLoop

+1

これは角度に固有のものではないことにも注意してください...それは、ブラウザのajax(XmlHttpRequest)ほとんどのイベントに比べて永遠になる可能性があります – charlietfl

答えて

0

まず、実行をブロックしないで、すぐに要求を送信します。基本的には、コールバック関数の概念を使用する約束パターンに従います。したがって、APIが応答を返すたびに、コールバック関数を呼び出してプロセスを再開します。

第2スレッドのような概念はありません。 HTTPが応答を返すと、実行は停止しません。そのコールバックメソッドを呼び出すだけで残りのコード行を実行します

1

私はそれがREST APIが

ありませんが呼び出されますから、JSの他のステップを実行する前に角度、角度仕事からREST呼び出しは、残りのコールをしないで作りますそれは間違っています。すぐに要求を送信します。しかし、応答が戻ってくるまでブロックされることはありません。なぜなら、時間がかかり完全にアプリケーションをフリーズする可能性があるからです。代わりに、コールバックを登録します。このコールバックは、応答が利用可能なときに後で呼び出されます。それが非同期の原理です。何秒のスレッドがありませんRESTのAPI

を実行するための第二のスレッドを生成します

これを調べる最も簡単な方法は、クリックまたはキー入力と同じように、HTTP応答がイベントであることを考慮することです。すべてのユニークなスレッドは、次のイベントを待ってループします。

+0

Javascriptファイル内の他の行を実行しているインタプリタの場合は、一時停止し、約束オブジェクトが解決した場合にコールバックを実行するように戻りますか? – InfiniteLoop

+0

いいえ.HTTPレスポンスは、ブラウザがイベントキューに投稿したイベントで、JavaScriptによって他のイベントと同様に処理されます。 JSに無限ループがある場合、HTTP応答を含むイベントはもう処理できません。受け取ったレスポンスに反応するために低レベルのXMLHttpRequestコールバックを実行するときに、HTTPプロミスを解決するのは角度そのものです。 –

関連する問題