Почему не проходит мой вариант функции?
Написать функцию increaseSalary, которая будет увеличивать зарплату сотруднику с наименьшей зарплатой.
Вам нужно
- Получает данные по всем работникам
- Находит работника с наименьшей зарплатой
- Отправляет запрос на повышение зарплаты этому сотруднику на 20%
- Если запрос прошел успешно - отправить сотруднику уведомление об увеличении ЗП тектом: Hello, <имя>! Congratulations, your new salary is <новая ЗП>!
- Если запрос завершился неудачей - отправить данные об ошибке администратору текст, выделенный жирным шрифтом
Должна всегда возвращать resolved промис с boolean значением:
true если увеличение прошло успешно false если нет Все функции для получения/изменения данных асинхронны и возвращают промисы. Вам предоставлены функции:
api.getEmployees(); // Возвращает массив с объектами {id: 343, name: 'Alex', salary: 20000}
api.setEmployeeSalary(employeeId, newSalary); // Принимает id сотрудника и новую зарплату. Возвращает новые данные по сотруднику.
api.notifyEmployee(employeeId, text); // Принимает id сотрудника и текст уведомления
api.notifyAdmin(error); // Принимает ошибку
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));
}
const api = {
_employees: [
{ id: 1, name: 'Alex', salary: 120000 },
{ id: 2, name: 'Fred', salary: 110000 },
{ id: 3, name: 'Bob', salary: 80000 },
],
getEmployees() {
return new Promise((resolve) => {
resolve(this._employees.slice());
});
},
setEmployeeSalary(employeeId, newSalary) {
return new Promise((resolve) => {
this._employees = this._employees.map((employee) =>
employee.id !== employeeId
? employee
: {
...employee,
salary: newSalary,
}
);
resolve(this._employees.find(({ id }) => id === employeeId));
});
},
notifyEmployee(employeeId, text) {
return new Promise((resolve) => {
resolve(true);
});
},
notifyAdmin(error) {
return new Promise((resolve) => {
resolve(true);
});
},
setEmployees(newEmployees) {
return new Promise((resolve) => {
this._employees = newEmployees;
resolve();
});
},
};
Ответы (1 шт):
Автор решения: mrEvgenX
→ Ссылка
Я попробовал у себя что-то воспроизвести и есть подозрение, что-то не так с клиентским кодом, где функция вызывается.
Функция, которая возвращает промис должна вызываться так и вам об этом прекрасно известно же:
console.log(api._employees);
increaseSalary().then(isOk => {
console.log(isOk);
console.log(api._employees);
})
Вывод:
[
{ id: 1, name: 'Alex', salary: 120000 },
{ id: 2, name: 'Fred', salary: 110000 },
{ id: 3, name: 'Bob', salary: 80000 } // Самый низкооплачиваемый сотрудник
]
true
[
{ id: 1, name: 'Alex', salary: 120000 },
{ id: 2, name: 'Fred', salary: 110000 },
{ id: 3, name: 'Bob', salary: 96000 } // Теперь зп +20%
]
Все работает абслютно правильно, судя по заданию.