今ワーカーについて学んでいるのですが、一度正しいコードで実行して正しい結果が得られたのですが、
ここの記述を変えてみたらどうなるだろう、と思って、javascriptのコードの一部を変えてみたら、正しく動作しました。これでもいいのだな、と思っていたら、記述をどう変えても正しく動作することに気づき、挙句には、全文をコメントアウトしても正しく動作しました。ちなみにちゃんと保存もしています。
このようなことってあり得るんでしょうか笑
ちなみにこのような現象はjavascriptコードだけで、htmlの記述は変えたらきちんとウィンドウにも反映されます。
/試してみたこと/
apache配下にhtml, jsファイル、ワーカーを保存していて、apache配下にjsファイルがあると保存が適用されないと思い、一度ローカル環境に戻してからコードを変えて保存して、またapache配下に戻したが結果は同様でした。
念の為、コードも載せておきます。変えてみた事柄についても記載したのでコメントをお願いしたいです。
html
1<!DOCTYPE html> 2<html lang="ja"> 3 <head> 4 <meta charset="utf-8"> 5 </head> 6 <form> 7 <input id="target" type="number" value="1000000">以下: 8 <input id="x" type="number" value="7">の倍数の個数= 9 <span id="result">-</span> 10 <input id="btn" type="button" value="計算"> 11 </form> 12 <script src="workerClient.js"></script> 13</html> 14
javascript
1document.addEventListener("DOMContentLoaded", function() { 2 document.getElementById("btn").addEventListener("click", function() { 3 let worker = new Worker("worker.js"); 4 5 worker.postMessage({ 6 "target": document.getElementById("target").value, 7 "x": document.getElementById("x").value 8 }); 9 document.getElementById("result").textContent = "計算中..."; 10 worker.addEventListener("message", function(e) { 11 /*messageを受け取るのはworkerではなくこのスレッドなので、 12 self.addEventListenerに変えてみた*/ 13 14 15 document.getElementById("result").textContent = e.data; 16 }, false); 17 18 worker.addEventListener("error", function(e) { 19 document.getElementById("result").textContent = e.message; 20 }, false); 21 },false); 22}, false); 23
以下ワーカー。
javascript
1self.addEventListener("message", function(e) { 2 let count = 0; 3 for(let i = 1; i < e.data.target; i++) { 4 if(i % e.data.x === 0) { count++; } 5 } 6 postMessage(count); 7}); 8
回答2件
あなたの回答
tips
プレビュー