async function ask(stockfish, command, params="") {
let
resolve,
idx = ("0000" + trigger).slice(-4),
message = command + " " + params,
promise = new Promise(r => resolve = r),
waitfor = ({
'go': 'bestmove',
'uci': 'uciok',
'isready': 'readyok',
'position': 'NOP',
'ucinewgame': 'NOP',
'd': 'Legal'
})[command]
;
stockfish.onmessage = e => {
console.log( e.data );
if (e.data.includes(waitfor)) {
messages.push(idx + ' <== ' + e.data, '');
mutable trigger += 1;
resolve(e.data);
} else {
messages.push(idx + ' ' + e.data);
}
}
;
if (!waitfor) throw new Error("command not available", command);
console.log( message );
messages.push(idx + ' ==> ' + message);
(waitfor === 'NOP') && messages.push('');
mutable trigger += 1;
stockfish.postMessage( message );
return promise;
}