回答編集履歴

2

修正

2022/07/24 16:46

投稿

退会済みユーザー
test CHANGED
@@ -31,6 +31,5 @@
31
31
  await _looper();
32
32
  }
33
33
  ```
34
- 実行確認用 👉 https://codepen.io/su507/pen/WNzENPv?editors=1011
34
+ 実行確認用 👉 https://jsfiddle.net/su507/fvqudc8b/2/
35
35
 
36
-

1

追記

2022/07/24 15:05

投稿

退会済みユーザー
test CHANGED
@@ -7,3 +7,30 @@
7
7
  - 現在動いている定間隔実行を表す`intervalID`を保持したりするのにクラスを使うと、実行を制御する変数や関連メソッドをまとめられて良いかと思います。(これはthink49さんの回答でも言われているとおりです)
8
8
 
9
9
 
10
+ ### 追記
11
+
12
+ 私のオススメは上記のように `setInterval()` を使うことですが、質問のコードにあるループ1回分の待ち時間を作る`_sleep(ms)` をそのまま使って、`test1()`の修正でどうにかしようとすると、以下でそれっぽく動きます。
13
+ ```javascript
14
+ const test1 = async () => {
15
+ if (test1.looper) {
16
+ test1.looper.shouldBreak = true;
17
+ }
18
+
19
+ const _looper = async () => {
20
+ _looper.shouldBreak = false;
21
+ for (let i = 0; i < 100; i++) {
22
+ if (_looper.shouldBreak) {
23
+ break;
24
+ }
25
+ console.log(`Hello ${i}`);
26
+ await _sleep(1000);
27
+ }
28
+ }
29
+
30
+ test1.looper = _looper;
31
+ await _looper();
32
+ }
33
+ ```
34
+ 実行確認用 👉 https://codepen.io/su507/pen/WNzENPv?editors=1011
35
+
36
+