Вот лог:
START
end
nextTick
Promise
Promise Next Tick
setTimeout
setTimeout 2
setImmediate
read file Next Tick
readFile setImmidiate
readfile setTimeout
После start идет end, а значит между ними начал выполняться fs.readFile. А в логах read идет после setImmediate, потому что позже выполнился (более долгая операция - чтение)
там где let count = 0; объявляешь массив пар(значение - количество) и перед тем как вызвать return result; закидываешь в него аргументы. Когда вызываешь метод totalRun - выбираешь из массива нужное значение