質問編集履歴
8
追加する
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
追加する
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
追加する
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
間違えた
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
間違えた
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
間違えた
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
間違えた
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; //
|
27
|
+
if(move)return; // Interval動作中は return させる
|
28
28
|
ft = 1;
|
29
29
|
const id = setInterval(fbr, 1);//ここを10にするとIntervalが止まらないことがある
|
30
30
|
function fbr(){
|
1
間違えた
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
|
20
|
+
break;
|
21
21
|
}
|
22
22
|
}
|
23
23
|
br = 1; // breakしたら br を 1 にする
|