teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

8

追加する

2020/06/28 01:02

投稿

takahashi-one
takahashi-one

スコア120

title CHANGED
File without changes
body CHANGED
@@ -45,4 +45,26 @@
45
45
  ```
46
46
  setIntervalを10にすると、10ミリ秒未満に再びrisizeされるとsetIntervalが呼ばれて複数のIntervalが動くことになるのは解りました。
47
47
  それではsetIntervalを1にしても1ミリ秒未満にrisizeが呼ばれれば同じことなのでしょうか。
48
- 他にいい方法はないでしょうか
48
+ 他にいい方法はないでしょうか
49
+
50
+ 教えてもらった参考コード。
51
+ ```javascript
52
+ let resol; //JavaScrptの基礎が解ってないのですが、これをコメントアウトしても動きます。なぜでしょうか?
53
+ plot();
54
+ async function plot(){
55
+ let i = 0;
56
+ while( true ){ // 永遠と繰り返す
57
+ //何かの処理
58
+ console.log(i++);//動作を確認
59
+ if( await new Promise( resolve => {
60
+ resol = resolve
61
+ setTimeout( () => { resolve( false ) }, 1000 );
62
+ } ) ){ break };
63
+ }
64
+ }
65
+
66
+ window.addEventListener("resize",function(){
67
+ resol( true ); //whileをbreak
68
+ plot();
69
+ });
70
+ ```

7

追加する

2020/06/28 01:02

投稿

takahashi-one
takahashi-one

スコア120

title CHANGED
File without changes
body CHANGED
@@ -7,6 +7,11 @@
7
7
  ここで質問なのですが、最初setIntervalの秒数を10にしていました。それだとwindowのリサイズ動作をやりまくるとタイミングによってsetIntervalが止まらないことがありました。それで、setIntervalの秒数を1にしたらちゃんと止まるようになりました。たまたま止まっているのでしょうか?
8
8
  下記のようにwhile(true)をちゃんとbreakしてからplot()を再度呼ぶようにするもっといい方法があるでしょうか?
9
9
  ```javascript
10
+
11
+ function delay(sec) {
12
+ return new Promise(resolve => setTimeout(resolve, sec));
13
+ }
14
+
10
15
  let br = 0, ft = 0, move = 0;
11
16
 
12
17
  plot();
@@ -19,6 +24,7 @@
19
24
  if (ft) { // whileをbreakさせる
20
25
  break;
21
26
  }
27
+ //console.log("plot"); // breakしたかを確認する時
22
28
  }
23
29
  br = 1; // breakしたら br を 1 にする
24
30
  }
@@ -33,6 +39,7 @@
33
39
  clearInterval(id); //breakを確認したら Interval を解除する
34
40
  plot();
35
41
  }
42
+ //console.log("fbr"); // Intervalが止まるかを確認する時
36
43
  }
37
44
  })
38
45
  ```

6

追加する

2020/06/25 09:28

投稿

takahashi-one
takahashi-one

スコア120

title CHANGED
File without changes
body CHANGED
@@ -35,4 +35,7 @@
35
35
  }
36
36
  }
37
37
  })
38
- ```
38
+ ```
39
+ setIntervalを10にすると、10ミリ秒未満に再びrisizeされるとsetIntervalが呼ばれて複数のIntervalが動くことになるのは解りました。
40
+ それではsetIntervalを1にしても1ミリ秒未満にrisizeが呼ばれれば同じことなのでしょうか。
41
+ 他にいい方法はないでしょうか

5

間違えた

2020/06/25 04:05

投稿

takahashi-one
takahashi-one

スコア120

title CHANGED
File without changes
body CHANGED
@@ -4,8 +4,7 @@
4
4
  brが1になったのを確認してからplot()を再コールしています。
5
5
  またsetInterval動作時はリサイズされてもreturnさせています。setIntervalが複数動作しないようにするためです。
6
6
 
7
- ここで質問なのですが、最初setIntervalの秒数を10にしていました。それだとwindowのリサイズ動作をやりまくるとタイミングによってsetIntervalが止まらないことがありました。それで、setIntervalの秒数を1にしたらちゃんと止まるようになりました。
7
+ ここで質問なのですが、最初setIntervalの秒数を10にしていました。それだとwindowのリサイズ動作をやりまくるとタイミングによってsetIntervalが止まらないことがありました。それで、setIntervalの秒数を1にしたらちゃんと止まるようになりました。たまたま止まっているのでしょうか?
8
- たまたま止まっているのでしょうか?
9
8
  下記のようにwhile(true)をちゃんとbreakしてからplot()を再度呼ぶようにするもっといい方法があるでしょうか?
10
9
  ```javascript
11
10
  let br = 0, ft = 0, move = 0;

4

間違えた

2020/06/25 03:37

投稿

takahashi-one
takahashi-one

スコア120

title CHANGED
File without changes
body CHANGED
@@ -13,9 +13,9 @@
13
13
  plot();
14
14
 
15
15
  async function plot(){
16
-   await delay(10);
17
16
  br = 0, ft = 0, move = 0; // 変数を全部 0 にする
18
17
  while(true){
18
+      await delay(10);
19
19
  //何かの処理
20
20
  if (ft) { // whileをbreakさせる
21
21
  break;

3

間違えた

2020/06/25 03:36

投稿

takahashi-one
takahashi-one

スコア120

title CHANGED
File without changes
body CHANGED
@@ -12,7 +12,8 @@
12
12
 
13
13
  plot();
14
14
 
15
- function plot(){
15
+ async function plot(){
16
+   await delay(10);
16
17
  br = 0, ft = 0, move = 0; // 変数を全部 0 にする
17
18
  while(true){
18
19
  //何かの処理

2

間違えた

2020/06/25 03:35

投稿

takahashi-one
takahashi-one

スコア120

title CHANGED
File without changes
body CHANGED
@@ -24,7 +24,7 @@
24
24
  }
25
25
 
26
26
  window.addEventListener("resize",function(){
27
- if(move)return; // setInterval動作中は return させる
27
+ if(move)return; // Interval動作中は return させる
28
28
  ft = 1;
29
29
  const id = setInterval(fbr, 1);//ここを10にするとIntervalが止まらないことがある
30
30
  function fbr(){

1

間違えた

2020/06/25 03:30

投稿

takahashi-one
takahashi-one

スコア120

title CHANGED
File without changes
body CHANGED
@@ -17,7 +17,7 @@
17
17
  while(true){
18
18
  //何かの処理
19
19
  if (ft) { // whileをbreakさせる
20
- break top;
20
+ break;
21
21
  }
22
22
  }
23
23
  br = 1; // breakしたら br を 1 にする