Ваша главная проблема в говнокоде, в котором Вы сами не в состоянии разобраться.
Для начала я отрефакторю вот этот кусок:
const minSalary = Math.min(...employeeData.map(({ salary }) => salary));
minSalaryEmployee = employeeData.filter(({ salary }) => {
return salary === minSalary;
});
const [id, oldSalary] = [
minSalaryEmployee[0].id,
minSalaryEmployee[0].salary,
];
const newSalary = oldSalary + (oldSalary / 100) * 20;
return { id: id, salary: newSalary };
ибо тут твориться полная жесть...
Если привести в более читабельный вид:
const minSalary = Math.min(...employeeData.map(({salary}) => salary));
const minSalaryEmployee = employeeData.find(({salary}) => salary === minSalary);
const {id, salary: oldSalary} = minSalaryEmployee;
const newSalary = oldSalary + (oldSalary / 100) * 20;
return {id, salary: newSalary};
то сразу можно увидеть простор для оптимизации поиска минимума:
const [minSalaryEmployee] = employeeData.reduce(([minEmployee, minSalary], employee) => {
const {salary} = employee;
return (salary < minSalary
? [employee, salary]
: [minEmployee, minSalary]
);
}, [null, Infinity]);
А заодно и формулу
const newSalary = oldSalary + (oldSalary / 100) * 20;
применив алгебру за 5 класс можно упростить до
const newSalary = oldSalary * 1.2;
Следующим шагом стоит развернуть все промисы. Вообще вкладывать промисы в друг друга не очень хорошая идея. Наличие .then внутри колбэка другого .then или колбэка-раннера new Promise - воняет очень скверно.
Немного поколдовав, заодно исправив ошибки с колбэками .then без return, получаем более читабельный, а главное работающий код:
function increaseSalary() {
return api.getEmployees()
.then(employeeData => {
const [minSalaryEmployee] = employeeData.reduce(([minEmployee, minSalary], employee) => {
const {salary} = employee;
return (salary < minSalary
? [employee, salary]
: [minEmployee, minSalary]
);
}, [null, Infinity]);
const {id, salary: oldSalary} = minSalaryEmployee;
const newSalary = oldSalary * 1.2;
return {id, salary: newSalary};
})
.then(({id, salary}) => api.setEmployeeSalary(id, salary))
.then(({name, id, salary}) => api.notifyEmployee(id, `Hello, ${name}! Congratulations, your new salary is ${salary}!`))
.catch(e => api.notifyAdmin(e));
}
P.S. я бы еще бил все это добро на отдельные функции, ибо complexity 10 это все еще много...
import api from 'path/to/api';
export function increaseSalary() {
return api.getEmployees()
.then(findEmployeeWithMinSalary)
.then(calculateNewSalary)
.then(setEmployeeSalary)
.then(notifyEmployee)
.catch(notifyAdmin);
}
function findEmployeeWithMinSalary(employeeData) {
const [minSalaryEmployee] = employeeData.reduce(minSalaryEmployeeReducer, [null, Infinity]);
return minSalaryEmployee;
}
// Complexity is 3 - это самая сложная функция
function minSalaryEmployeeReducer([minEmployee, minSalary], employee) {
const {salary} = employee;
return (salary < minSalary
? [employee, salary]
: [minEmployee, minSalary]
);
}
function calculateNewSalary({id, salary}) {
return {
id,
salary: salary * 1.2
};
}
function setEmployeeSalary({id, salary}) {
return api.setEmployeeSalary(id, salary);
}
function notifyEmployee({name, id, salary}) {
return api.notifyEmployee(id, `Hello, ${name}! Congratulations, your new salary is ${salary}!`);
}
function notifyAdmin(e) {
return api.notifyAdmin(e);
}