Я пытаюсь обработать возврат обещания, чтобы получить блокирующее поведение при вызове asyncFunc, определенного в фрагменте кода ниже.В этой функции я использую веб-работника.
Я не специалист по javascript, и концепция обещания является новой для меня.Я попытался определить функцию asyncFunc
в блоке моего кода.Если я вызываю эту функцию после, у меня обычно должен быть полностью выполнен код внутри asyncFunc (но я не уверен).
Цель состоит в том, чтобы нарисовать холст (который в настоящее время представляет игровую доску) один раз веб-работник получил массив для рисования (HitCurrentvariable
) здесь, т.е. синхронно (функция рисования выполняется displayCurrentHit(HitCurrent);
)
else if (mode == 'computer') {
// Call asynchronous function with promise
function asyncFunc(HitCurrent) {
// Return promise
return new Promise( resolve => {
// Creation of webworker
let firstWorker = new Worker(workerScript);
firstWorker.onmessage = function (event) {
resolve(event.data);
}
// Post current copy of HitCurrent, i.e HitCurrent
firstWorker.postMessage([HitCurrent, HitCurrent.playerCurrent, maxNodes]);
}).then(({result}) => {
// Get back game board of webworker
HitCurrent = result.HitResult;
// Get back suggested hit computed by webworker
[a,b] = HitCurrent.coordPlayable;
console.log('Into promise : coordPlayable : (a,b) = ',a,b);
// Drawing all lines from suggested hit (in 8 directions)
for (k = 0; k < 8; k++) {
exploreHitLine(HitCurrent, a, b, k, 'drawing');
}
// Remove playable hits
cleanHits('playable', HitCurrent);
// Display current game
displayCurrentHit(HitCurrent);
// Up to there, first computer hit is good
// and game board is well drawn
alert('Stop just after displayCurrentHit');
})
}
// Call asyncFunc : blocking ???
asyncFunc(HitCurrent).then(console.log('Call async function'));
// Prove asynchronuous of asyncFunc call
alert('after asynFunc().then');
}
Вызов asyncFunc не блокируется.Если бы кто-то мог дать метод для отображения текущей игровой доски синхронно, используя концепцию Promise
?
С уважением