• Обработка кол-ва ошибок, как лучше реализовать?

    @Oureap
    async function increaseSalary() {	
    	//кол-во успешных запросов
    	let countInquiry = 0;
    	//бюджет
    	let newBudget = 0;
    
    	//список сотрудников
    	const employeesList = await api.getEmployees();	
    	//средняя ЗП
    	const averageSalaries = 
            Math.floor((employeesList.reduce((acc, el) => acc += el.salary, 0)) / employeesList.length);	
    
    	try {
    		//перебираем сотрудников из списка
    		for (employee of employeesList) {
    			//повышенная ЗП
    			let changedSalary = 0;
    			
    			const sendRequestSalary = async () => {
    				try {
    					//запрос на увеличение ЗП 
    					await api.setEmployeeSalary(employee.id, changedSalary);
    					//текст для сотрудника
    					/* const changedEmployeeList = api.getEmployees();
    					console.log(changedEmployeeList) */
    					let text = 
                                            `Hello, ${employee.name}! Congratulations, your new salary is ${changedSalary}!`;
    					//отправка сообщения сотруднику
    					await api.notifyEmployee(employee.id, text);
    					//фиксация успешных запросов
    					countInquiry++;
    					//формирование бюджета
    					newBudget += changedSalary;
    				} catch (error) {
    					//сообщение администратору об ошибке
    					await api.notifyAdmin(error);
    				}
    			}
    			//расчет повышения ЗП, согласно условиям
    			if (employee.salary > averageSalaries) {
    				changedSalary = parseInt(employee.salary * 1.1);
    				console.log(changedSalary)
    				await sendRequestSalary();
    			} else if (employee.salary < averageSalaries) {
    				changedSalary = parseInt(employee.salary * 1.2);
    				await sendRequestSalary();
    			} 
    		}
    
    	} catch (error) {
    		//сообщение администратору об ошибке
    		await api.notifyAdmin(error);
    
    	} finally {
    		//отправка бюджета в бухгалтерию
    		await api.sendBudgetToAccounting(newBudget);		
    	}
    
    	//возвращаем кол-во успешных операций увеличения ЗП
    	return countInquiry;
    }
    Ответ написан
    Комментировать
  • Как правильно обработать ошибки?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    В чем проблема?
    В отсутствии функции foo, неиспользовании аргумента в getData, попытке сравнения экземпляра с классом и, возможно, слишком большой глубине рекурсии.
    Да, и ещё, отсутствующий аргумент - это не null.
    Ответ написан
    Комментировать
  • Как сделать, чтобы событие вызывалось один раз?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Проблема вот тут:
    const remove = this.on(events

    Метод on у Вас ничего не возвращает, соответственно в remove будет undefined, функции там взяться неоткуда.
    Переменной events нет в скоупе данного метода, очевидно имелась в виду eventName

    А вообще, вместо массива колбэков для события лучше использовать Set, так метод off будет работать за O(1), а не за O(n) как сейчас.

    В методе once можно подписываться на событие через метод on, и отписываться через метод off при его наступлении (так например делает EventEmitter из node.js). Но стоит учесть момент, что off должен работать и для once событий, а у Вас будет записан колбэк созданный в once, а не тот, что передал пользователь. Вообще проще хранить 2 коллекции: для многоразовых для одноразовых событий, ну или параметризовать колбэки (тогда лучше хранить их в Map, где ключи - колбэки, а значения - их параметры).

    Ну и еще обратите внимание, что у Вас в методах emit и once колбэк пользователя вызывается по разному:
    callback.apply(this, args) и callback.call(null, args)
    Ответ написан
    1 комментарий
  • Как сделать, чтобы событие вызывалось один раз?

    Alexandroppolus
    @Alexandroppolus
    кодир
    this.events[eventName].push(callback);

    вместо callback добавляй объект
    this.events[eventName].push({callback, isOnce: true}); // или isOnce: false


    в emit после вызова всех колбэков с помощью filter выкинь все isOnce: true
    Ответ написан
    Комментировать
  • Проблемы с датой, как правильно реализовать?

    @hikkama
    Убери условие
    if (time < 0) {
            days === 0;
          } else {
            days = Math.trunc(time / oneDay);
          }


    Оставь
    days = Math.trunc(time / oneDay);
      if (days === -0) days = 0
    Ответ написан
    Комментировать
  • Как проверить равенство вложенных объектов?

    0xD34F
    @0xD34F Куратор тега JavaScript
    function isEqual(a, b) {
      if (a instanceof Object && a.constructor === b?.constructor) {
        const keys = Object.keys(a);
        return (
          keys.length === Object.keys(b).length &&
          keys.every(k => Object.hasOwn(b, k) && isEqual(a[k], b[k]))
        );
      } else {
        return Object.is(a, b);
      }
    }
    Ответ написан
    Комментировать
  • Как составить SQL запрос для базы данных?

    Alexandre888
    @Alexandre888
    Javascript-разработчик
    -  SELECT orders_id, empoyer_id FROM orders WHERE DELIVERY_TIME > '30' AND ITEMS = 'гречка';
    +  SELECT orders_id, empoyer_id FROM orders WHERE DELIVERY_TIME > 30 AND ITEMS = 'гречка';


    https://www.sqlstyle.guide/
    Ответ написан
    1 комментарий