async function bestmove(stockfish, message) {
let resolve;
const promise = new Promise(r => resolve = r);
const messages = [];
const messaged = e => {
messages.push(e.data);
if (/^bestmove /.test(e.data)) {
stockfish.onmessage = null;
resolve(messages);
}
};
if (stockfish.onmessage) throw new Error("already listening");
stockfish.onmessage = messaged;
stockfish.postMessage(message);
return promise;
}