
No.4ベストアンサー
- 回答日時:
こんにちは
通常のスクリプトは質問者様がお考えの通りシークエンシャルに処理されますが、ajaxのような非同期処理はそうではありません。
(だから非同期といわれるのでしょう)
>処理が終わってから次の処理とループで回す方法はないのでしょうか?
2通りの方法が考えられます。
一つ目は他の方がすでに回答なさっているように、非同期処理を行わないこと(=同期処理で処理すること)。
同期処理にすれば、シークエンシャルに処理されますので、通常のループの記法のままで順次処理がなされます。
もう一つは非同期処理を活かしてループと同じように処理できるようにする方法。
非同期の場合は、前述のようにシークエンシャルな処理は期待できませんので、通常のfor~~のようなループではうまくいきません。
非同期処理にはコールバックが設定されていると思いますが、これは非同期の処理が終わった時に続けて実行される内容を指定できるものです。
ですので、『カウンタを+1して、次のループを実行する』という関数を用意しておいて、これをコールバックとして呼び出すようにすれば、非同期処理でも順に処理することが可能となります。
(非同期処理を1ループ内で複数行っている場合は、制御がもう少し複雑になりますが、要領は同じです)
両者の違いは、同期処理で行う場合は待ち時間(ajaxの場合はレスポンスを待つ時間)の間もブラウザがスクリプトで拘束されるので、操作等を受け付けないのに対して、非同期処理の場合は待ち時間の間も別の操作や処理が可能になるという点でしょう。
Totalの処理時間については、ほとんがど待ち時間で決まってしまうので、単純なケースではどちらも同じと考えられるでしょう。
一方で、複数の非同期処理を並列で実行しているような場合は、全部を同期処理で処理するのに比して、速くなることが期待できます。
No.3
- 回答日時:
>一般的に処理が終わってから次の処理とループで回す方法はないのでしょうか?
いや、だから・・・最初に書いたとおり原則上から順に処理がすすみます。
「あえて非同期処理をしている」箇所があれば、それを同期処理に書き換えればいけます。
順番にやりたいのであれば、非同期処理がされている箇所を一つ一つつぶすしかありません。
No.2
- 回答日時:
>多分、ajax系のような操作をしています。
>XMLHttpRequestで、ページの情報を取得したり。
ajaxでURLをopenする際、第3引数にfalseをしていすると同期処理になります。
var async=false;//async=trueにすると非同期
ajax.open("GET", url ,async);
この回答へのお礼
お礼日時:2016/01/28 19:41
再度回答ありがとうございます。
処理の中にajaxの部分もあれば、他の処理もいろいろあります。
一般的に処理が終わってから次の処理とループで回す方法はないのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
JavaScriptからJAVAクラスを呼...
-
tryの終了
-
表示待ち時間に「処理中...」の...
-
vba Sleep関数について教えてく...
-
「タイプ初期化子が例外をスロ...
-
eclipse-Tomcatでのデバッグに...
-
関数内の変数に<summary>コメン...
-
エクセルVBAで、条件に一致する...
-
中学のクラス数
-
javascriptからjavaを呼び出したい
-
【sendkeysメソッドが動かずに...
-
Excelで =EMBED("Acrobat Docu...
-
引数で日付を2つ与え、その間の...
-
サーブレットコンテキストの意...
-
UMLのクラス図はmain()も含むん...
-
リフレクション
-
0歳児の指しゃぶりに関して
-
final修飾子を使っているのに、...
-
変数名の付け方
-
ウィンドウを最前面にできません
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Javaプログラムからポップアッ...
-
Javaでのデバッグコード削除
-
tryの終了
-
Tomcat高負荷時の設定について
-
SwingUtilities.invokeLater(ne...
-
ラベルの表示までが異常に遅い...
-
vba Sleep関数について教えてく...
-
Delphiのマルチスレッドの割り...
-
ラジオボタンの選択判定
-
アコーディオンメニューをアン...
-
JSP、サーブレットの初期処理
-
ftp 同時複数接続の負荷テスト...
-
[Java] while(true)の意味
-
C#で別スレッドの終了を知りたい
-
switch文の中に、throws new Ex...
-
アロー関数がよくわかりません
-
セル範囲で文字を検索はFor必須?
-
PHP
-
Servlet+JSPを使ったWEBアプリ...
-
Javaプログラムから外部コマン...
おすすめ情報