Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.06.2022, 19:19
Профессор
Отправить личное сообщение для NovichokJS Посмотреть профиль Найти все сообщения от NovichokJS
 
Регистрация: 25.04.2022
Сообщений: 159

Вывести соответствующее сообщение логгера
Помогите пожалуйста подправить таким образом чтобы в массив попадало сообщение от соответствующего метода.
У меня сейчас в сообщении везде выводится: "Unexpected error on the site".
Вот код:

const createLogger = () => {
    let type = '';
    let message = ''

    function warn(messageOfWarn) {
        type = 'warn';
        message = messageOfWarn;
    }

    function error(messageOfError) {
        type = 'error';
        message = messageOfError;
    }

    function log(messageOfLog) {
        type = 'log';
        message = messageOfLog;
    }

    function getRecords(type) {

        return [{ message: message, type: type, dateTime: new Date() }];

    }
    return {
        warn,
        error,
        log,
        getRecords,
    }
};

// examples
const logger1 = createLogger();
logger1.log('User logged in');
logger1.warn('User is tring to ented restricted page');
logger1.error('Unexpected error on the site');

console.log(logger1.getRecords('log')); // ===> [{ message: 'User logged in', type: 'log', dateTime: Date }]
console.log(logger1.getRecords('error')); // ===> [{ message: 'Unexpected error on the site', type: 'error', dateTime: Date }]
console.log(logger1.getRecords('warn')); // ===> [{ message: 'User is tring to ented restricted page', type: 'warn', dateTime: Date }]
Ответить с цитированием
  #2 (permalink)  
Старый 14.06.2022, 19:54
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

NovichokJS,
где-то надо хранить данные!!!
const createLogger = () => {
    let type = '';
    let message = ''
    let obj = {}

    function warn(messageOfWarn) {
        type = 'warn';
        message = messageOfWarn;
        obj[type] = {type, message}
    }

    function error(messageOfError) {
        type = 'error';
        message = messageOfError;
        obj[type] = {type, message};
    }

    function log(messageOfLog) {
        type = 'log';
        message = messageOfLog;
        obj[type] = {type, message}
    }

    function getRecords(type) {

        return [{ ...obj[type]??{type, message : ''}, dateTime: new Date() }];

    }
    return {
        warn,
        error,
        log,
        getRecords,
    }
};

// examples
const logger1 = createLogger();
logger1.log('User logged in');
logger1.warn('User is tring to ented restricted page');
logger1.error('Unexpected error on the site');

console.log(logger1.getRecords('log')); // ===> [{ message: 'User logged in', type: 'log', dateTime: Date }]
console.log(logger1.getRecords('error')); // ===> [{ message: 'Unexpected error on the site', type: 'error', dateTime: Date }]
console.log(logger1.getRecords('warn')); // ===> [{ message: 'User is tring to ented restricted page', type: 'warn', dateTime: Date }]
Ответить с цитированием
  #3 (permalink)  
Старый 14.06.2022, 20:05
Профессор
Отправить личное сообщение для NovichokJS Посмотреть профиль Найти все сообщения от NovichokJS
 
Регистрация: 25.04.2022
Сообщений: 159

нужно чтобы на выходе получался массив с одним объектом формата такого:
[{ message: 'User logged in', type: 'log', dateTime: Date }]

Можете пожалуйста упростить это выражение:
return [{ ...obj[type]??{type, message : ''}, dateTime: new Date() }];
Ответить с цитированием
  #4 (permalink)  
Старый 14.06.2022, 20:08
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Сообщение от NovichokJS
нужно чтобы на выходе получался массив с одним объектом формата такого:
что не так в коде?
Ответить с цитированием
  #5 (permalink)  
Старый 14.06.2022, 20:14
Профессор
Отправить личное сообщение для NovichokJS Посмотреть профиль Найти все сообщения от NovichokJS
 
Регистрация: 25.04.2022
Сообщений: 159

Сообщение от рони Посмотреть сообщение
что не так в коде?
у меня при сохранении кода в VSCode разъеденяется знаки вопросов вот так ? ? и соответственно создает ошибку https://prnt.sc/MFfvQI-TdOn6 поэтому и спрашиваю можно ли упростить выражение это без использования знаков вопроса
Ответить с цитированием
  #6 (permalink)  
Старый 14.06.2022, 20:22
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

NovichokJS,
function getRecords(type) {
        let o = obj[type];
        if(!o) o = {type, message : ''};
        o.dateTime = new Date();
        return [o];
    }
Ответить с цитированием
  #7 (permalink)  
Старый 14.06.2022, 20:34
Профессор
Отправить личное сообщение для NovichokJS Посмотреть профиль Найти все сообщения от NovichokJS
 
Регистрация: 25.04.2022
Сообщений: 159

спасибо!. а если я несколько вызовов сделаю метода log вот так:

const logger1 = createLogger();
logger1.log('User logged in');
logger1.warn('User is tring to ented restricted page');
logger1.log('User logged out');
logger1.error('Unexpected error on the site');


то как сделать чтобы на выходе у меня получилось :

logger1.getRecords('log'); // ===> [{ message: 'User logged out', type: 'log', dateTime: Date }, { message: 'User logged in', type: 'log', dateTime: Date }]
Ответить с цитированием
  #8 (permalink)  
Старый 14.06.2022, 20:36
Профессор
Отправить личное сообщение для NovichokJS Посмотреть профиль Найти все сообщения от NovichokJS
 
Регистрация: 25.04.2022
Сообщений: 159

ну т.е. чтобы в массив добавлялся еще один соответствующий объект
Ответить с цитированием
  #9 (permalink)  
Старый 14.06.2022, 20:45
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

NovichokJS,
const createLogger = () => {
    let type = '';
    let message = '';
    let arr = [];

    function warn(messageOfWarn) {
        type = 'warn';
        message = messageOfWarn;
        arr.push({type, message})
    }

    function error(messageOfError) {
        type = 'error';
        message = messageOfError;
        arr.push({type, message})
    }

    function log(messageOfLog) {
        type = 'log';
        message = messageOfLog;
        arr.push({type, message})
    }

    function getRecords(type) {
        let a = arr.filter(({type : e}) => e == type);
        a = a.map(o => (o.dateTime = new Date(), o));
        return a;
    }
    return {
        warn,
        error,
        log,
        getRecords,
    }
};

// examples
const logger1 = createLogger();
logger1.log('User logged in');
logger1.warn('User is tring to ented restricted page');
logger1.log('User logged out');
logger1.error('Unexpected error on the site');
console.log(logger1.getRecords('log')); // ===> [{ message: 'User logged out', type: 'log', dateTime: Date }, { message: 'User logged in', type: 'log', dateTime: Date }]
Ответить с цитированием
  #10 (permalink)  
Старый 14.06.2022, 20:50
Профессор
Отправить личное сообщение для NovichokJS Посмотреть профиль Найти все сообщения от NovichokJS
 
Регистрация: 25.04.2022
Сообщений: 159

круто, спасибо!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывести сообщение о копировании текста Igorsrt Элементы интерфейса 4 27.01.2019 12:06
Как приплюсовать 3 inputa и вывести, сообщение. ainur777 Элементы интерфейса 2 10.11.2013 15:33
как вывести сообщение только когда селект не выбран imediasun1 Элементы интерфейса 5 11.05.2013 17:40
Вывести сообщение в другой фрейм (чат) Гробовщик AJAX и COMET 0 29.03.2013 06:05
Вывести сообщение по клику по кнопке формы Sergios Элементы интерфейса 2 30.01.2012 15:35