Задать вопрос
@Niki21212

Как сделать, чтобы отправлялись данные об ошибке?

Вам нужно

  • Получает данные по всем работникам
  • Находит работника с наименьшей зарплатой
  • Отправляет запрос на повышение зарплаты этому сотруднику на 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() {
try {
    return api.getEmployees()
        .then(emp => {
            const [minSalaryEmployee] = emp.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();
    });
  },
};
  • Вопрос задан
  • 261 просмотр
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
const increaseSalary = async () => {
  try {
    const employees = await api.getEmployees();
    const employee = employees.reduce(
      (acc, cur) => (acc.salary > cur.salary ? cur : acc),
      { salary: Infinity },
    );
    const newSalary = (employee.salary * 1.2) | 0;
    const result = await api.setEmployeeSalary(employee.id, newSalary);
    if (result.salary !== newSalary) {
      throw 'API Error, salary has not increased';
    }
    await api.notifyEmployee(
      employee.id,
      `Hello, ${employee.name}! Congratulations, your new salary is ${newSalary}!`,
    );
    return true;
  } catch (e) {
    api.notifyAdmin(e.message);
    return false;
  }
});
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы