const keypair = require('keypair');
let interval;
let workerResult;
let i = 0;
function check() {
if (typeof workerResult !== 'object') {
postMessage({time: i});
i++;
}
else {
clearInterval(interval);
postMessage(workerResult);
}
}
onmessage = (e) => {
interval = setInterval(() => {
check();
}, 1000);
workerResult = keypair(e.data);
}
setTimeout(() => {generate(2048)}, 0);
И, судя по всему, функция keypair «тяжёлая» и тоже синхронная.