我遇到了两个版本的代码片段,希望它们能做同样的事情,一个版本使用经典方法(不使用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个代码段是否等效?目前,情况似乎并非如此。
致谢