Серьезно? Ну опишите хоть стек технологий, которые будут использоваться? Что будет на беке? Если nodejs, то тут выбор небольшой. Если используем ws, то:
Никогда не делайте задержку "в 2-3 секунды, авось успеет". Точно не успеет когда-нибудь. Надо всегда полагаться только на железные факты. Я бы предложил сделать отправку формы аяксом, ловить получение ответа от сервера и после этого уже редиректить пользователя.
Это вообще сомнительное решение. Никогда, запомните, никогда(!) нельзя использовать eval, если вы не контролируете то, что туда придёт. Это открывает огромную дыру в безопасности. Да и сам способ выглядит как дикий костыль.
Советую хранить все переменные не просто так, а как ключи какого-то объекта. Тогда обновление их не потребует вызова eval.
Надо сделать так, чтобы эта функция возвращала Promise, который будет резолвиться в момент получения ответа с сервера. А дальше просто: собираем массив с такими промисами и отдаём в Promise.all; как только все ответы были получены показываем alert или что-то иное.
Это spread оператор. Такая запись просто создаёт объект, в который копирует все ключи из другого объекта. Это просто синтаксический сахар для Object.assign({}, anyObj);
Очевидно, так надо делать - когда это нужно. И не надо делать, когда это не нужно. Если надо скопировать объект, скопировать объект и добавить в него новые ключи, объединить 2 объекта. Развитие этих конструкций получило после популяризации философии immutable.