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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) マクロで謎の現象が起きていて困ってます。 エクセルで作ったボタンを押すとマクロが動いて処理をしてくれ 3 2023/06/22 17:28
- JavaScript 変数のスコープの問題? 3 2022/06/23 09:32
- JavaScript 助けてください‼︎ javascriptで質問があります。 配列を定義して、 29342、45342 3 2022/06/26 22:06
- Visual Basic(VBA) エクセルVBA コードが同じでもファイルによって処理速度が大きく変わるのはなぜ 5 2022/11/06 21:34
- その他(プログラミング・Web制作) Pythonでこのプログラミングを作成するには 2 2022/10/25 21:19
- Java javaの質問です 次の機能を有するメソッド4つを自クラスに作成し、実装したいです 【機能】 足し算 1 2022/06/15 17:49
- Excel(エクセル) excelにて、ある固定値から連番を振りたいが、上限値が異なる連番を振る処理を複数回行いたい場合 6 2022/10/22 11:01
- C言語・C++・C# C言語:数値の桁数指定についての質問です。 8 2022/05/26 23:53
- PHP PHPの変わった閉じタグの必要性と意味を教えてください。 1 2022/08/28 15:15
- 財務・会計・経理 決算書類作成について 5 2022/04/01 16:23
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ftp 同時複数接続の負荷テスト...
-
アコーディオンメニューをアン...
-
tryの終了
-
switch文の中に、throws new Ex...
-
スレッド
-
ファイルの排他
-
Ajaxの実行速度と読み方について
-
onBlurとonFocusの処理順序につ...
-
エクセルVBAで、条件に一致する...
-
3年間同じクラスになる確率
-
インスタンス参照でアクセスで...
-
c++,ある関数のクラスから別の...
-
ワイルドカード<?>と型パラメー...
-
「天声人語」をインターネット...
-
DataGridViewでセルクリックイ...
-
string formatについて
-
クラス間でのデータ参照
-
変数の参照でエラーが出てしま...
-
VBA 同じ名前のオブジェクトを...
-
String型の日付(2005/11/25)の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
tryの終了
-
数値の定数を付ける時
-
Javaでのデバッグコード削除
-
C#で別スレッドの終了を知りたい
-
[Java] while(true)の意味
-
Javaプログラムからポップアッ...
-
Tomcatのスレッドを破棄する方法
-
ラジオボタンの選択判定
-
JavaScriptからJAVAクラスを呼...
-
素数判定を再帰処理で
-
PHPでDB処理中にプログレスバー...
-
Javaアプリケーション実行の返...
-
WPF C#でF10のイベント取得方法...
-
doGetとdoPostの違い
-
switch文の中に、throws new Ex...
-
Tomcat高負荷時の設定について
-
ラベルの表示までが異常に遅い...
-
ExcelVBA で文字列の特定の文字...
-
JDBCでテーブルUPDATE後の再検...
-
SwingUtilities.invokeLater(ne...
おすすめ情報