Рекурсивно функцию вызывайте, просто, до тех пор, пока нужный ответ не придёт. Но имейте ввиду, что это будет грузит и сервер, и клиента. Лучше сделать таймаут между вызовами. Пример реализации на Node:
async function start(tries = 5, delayTime = 1000) {
for (let i = 1; i <= tries; i++) {
console.log('Try #', i);
try {
return await yourFunction();
} catch(e) {
if (i >= tries) throw e;
}
await delay(delayTime);
}
}
async function delay(time = 1000) {
return new Promise(resolve => {
setTimeout(resolve, time);
})
}
Как раз писал недавно модуль для того же, но с большим функционалом.