回答編集履歴

2

おまけ追加

2019/03/29 10:40

投稿

miyabi-sun
miyabi-sun

スコア21445

answer CHANGED
@@ -23,4 +23,21 @@
23
23
 
24
24
  また、実行中はブラウザの応答も停止するので、
25
25
  マウスでページをスクロールするといったことも出来なくなってしまいます。
26
- ですので、Ajaxを含め、待たせるとか何時終了するか分からない処理はイベント登録という形で飛ばし、JavaScriptの実行自体は早々に終了させる設計にするべきなのです。
26
+ ですので、Ajaxを含め、待たせるとか何時終了するか分からない処理はイベント登録という形で飛ばし、JavaScriptの実行自体は早々に終了させる設計にするべきなのです。
27
+
28
+ ---
29
+
30
+ 『追記』
31
+
32
+ > ・追加する処理は、既存のhtmlの表示や処理を邪魔しないようにする。(今回の質問内容はここです)
33
+ ・追加処理の内容は、①日時取得 ②Cookie作成 ③別APIへのデータ送信($.post()を用いる)などです。
34
+
35
+ 要望がこれなので、
36
+ 普通にイベント駆動のやり方で非同期処理書いていけば良いんですよ。
37
+
38
+ 並列でやりたいなら好き勝手に完了条件と実行して欲しい関数をセットでイベント登録すれば良いですし、
39
+ 直列でやりたいなら、Aの条件が完了をトリガーで発火する関数に、BとCの処理内容を書きましょう。
40
+ その場合関数登録がどんどんネストして辛くなってきます。
41
+ この関数のネストをコールバック地獄と呼びます。
42
+
43
+ コールバック地獄の解消方法は色々ありますので、必要になったら別途調べてみてください。

1

ビジースリープという用語は存在しないので、ビジーウェイトに変更

2019/03/29 10:40

投稿

miyabi-sun
miyabi-sun

スコア21445

answer CHANGED
@@ -16,10 +16,10 @@
16
16
  > 下記コードを実行したところ、hoge()が10秒待った後に実行されました。
17
17
 
18
18
  今回使われているsleep関数は無限ループのようなもので無理やり処理をせき止めています。
19
- この手法をビジースリープと呼びますが、JavaScriptに於いては非推奨です。
19
+ この手法をビジーウェイトと呼びますが、JavaScriptに於いては非推奨です。
20
20
 
21
21
  イベントループの巡回を始めるにはJavaScriptの現在実行中の処理が全て完了する必要があるので、
22
- ビジースリープでせき止めるとhoge関数の発火が遅れ、10秒待たされる事になります。
22
+ ビジーウェイトでせき止めるとhoge関数の発火が遅れ、10秒待たされる事になります。
23
23
 
24
24
  また、実行中はブラウザの応答も停止するので、
25
25
  マウスでページをスクロールするといったことも出来なくなってしまいます。