◆ Worker は悪くないのです
◆ 新し目な機能だしバグありそうという先入観はよくないのです 

ちょっと時間かかりそうな処理があったので Worker 使うことにしました

サンプルなので 配列の値に 100 足したものを返すだけにしてます
;[1,2,3].forEach(val => {
  var worker = new Worker("worker.js")
  worker.onmessage = function(eve) {
  console.log(val, eve.data)
  }
  worker.postMessage(val)
})
クラッシュ!!

配列の要素がいっぱいあって Worker をたくさん起動するとブラウザ落ちるので 単純にこうしてみました
var worker = new Worker("worker.js")
;[1,2,3].forEach(val => {
  worker.onmessage = function(eve) {
  console.log(val, eve.data)
  }
  worker.postMessage(val)
})
3 101
3 102
3 103

これでちゃんと……… って val が 3 ???!

val は forEach でスコープ作ってるはずだし どうなってるの?
Worker なんてまだ新しめなもの使ってるし バグなのかな

とりあえず beta 版の Chromium で試してみる
3 101
3 102
3 103

かわんない!

特におかしいところなんてないはず
let にしたら?
  "use strict"
  var worker = new Worker("worker.js")
  for(let i=1;i<=3;i++){
  worker.onmessage = function(eve) {
  console.log(i, eve.data)
  }
  worker.postMessage(i)
  }
}()
3
3
3



こっちでも全部最後のになる
なにがどうなってるの?
Worker 使うなってことなの?




としばらく悩んだところ

worker は 1 つだけで その onmessage プロパティを毎回上書きしてる!!!!!!!!

そんな初歩的なミスに気づいてしまったのです

worker は悪くありません
worker はちゃんと動くできる子です
安定してなさそうだからと言って 変なとこあったらバグ って先入観はよくないのです
あと 量産するなら使い終わったらちゃんと terminate してあげてください