fxobject,
для справки.
1)
longQuery(params, (response) => { ... })
Запрос "куда-то туда". В базу данных, на другой сервер, в файловую систему, пересылка данных по сети... Здесь на отрезке времени от вызова longQuery и до срабатывания колбэка (функции, в которую будет передан response) Node не блокируется, не простаивает. Она вообще забывает про отправленный запрос и занимается своими делами - обработкой других запросов. Потому longQuery безболезненно запускается в основном потоке.
2)
const response = bigCalculationWithLongCycle(params);
это синхронные вычисления. Они заблокируют ноду. Поэтому вот их надо в отдельном воркере. Воркер отработает параллельно и закинет результат в основной поток. Над этой штукой можно легко сделать обертку, подобную п.1, с философией "запрос в другой поток за результатом вычислений", ну ты понял. А ещё правильнее всё потом промисифицировать для пущего удобства.
Если у тебя вперемешку и то и другое, то декомпозируй на функции-запросы и функции-вычисления, после чего пп. 1 и 2.