Javascript Webworker-2个代码片段的等效性

时间:2018-12-28 09:05:26

标签: javascript scope callback global-variables web-worker

我遇到了两个版本的代码片段,希望它们能做同样的事情,一个版本使用经典方法(不使用webworker),另一个版本使用webworker。

在此代码段中,我陷入了以下问题:

 else if (mode == 'computer') {
 new Promise( resolve => {
    let HitTemp = JSON.parse(JSON.stringify(HitCurrent));
    let firstWorker = new Worker(workerScript);
    firstWorker.onmessage = function (event) {
        resolve( event.data );
    }
    firstWorker.postMessage([HitTemp, HitTemp.playerCurrent, maxNodes]);
  }).then(({result}) => {
    var HitResult = result.HitResult;
    [a, b] = HitResult.coordPlayable; // <-- get values from result
    //move for loop inside the callback
    for (var k = 0; k < 8; k++) {
       exploreHitLine(HitCurrent, a, b, k, 'drawing');
    }
    // Clean playable hits
    cleanHits('playable', HitCurrent);
    // Display current game board
    displayCurrentHit(HitCurrent);
     });
    }
}

但是,代表当前游戏板的HitCurrent不会显示实际情况,我的意思是,一旦计算出的点击数(由网络工作人员完成)。

我不明白为什么新的匹配结果不显示

displayCurrentHit(HitCurrent);

有效的经典方法(没有网络工作者)是这样编码的:

else if (mode == 'computer') {
  HitTemp = JSON.parse(JSON.stringify(HitCurrent));
  result= negaMax(HitTemp, HitTemp.playerCurrent, maxNodes);
  a = HitTemp.coordPlayable[0];
  b = HitTemp.coordPlayable[1];
  // Explore all directions for computed hit
  for (k = 0; k < 8; k++) {
   exploreHitLine(HitCurrent, a, b, k, 'drawing');
  }
  // Clean playable hits
  cleanHits('playable', HitCurrent);
  // Display current game board
  displayCurrentHit(HitCurrent);
 }

全局变量和局部变量之间可能存在冲突。

是否有人可以告诉我上面的2个代码段是否等效?目前,情况似乎并非如此。

致谢

0 个答案:

没有答案