Ответы пользователя по тегу JavaScript
  • Как можно скрыть ошибку в консоли?

    @karambafe
    401 - нормальный ответ сервера на неправильные данные при авторизации.
    MDN:
    Код ответа на статус ошибки HTTP 401 Unauthorized клиента указывает, что запрос не был применен, поскольку ему не хватает действительных учетных данных для целевого ресурса.


    Скрывать не нужно, так как консоль предназначена для разработчика (не зря в хроме раздел называется Chrome DEV tools), а не для пользователя. По таким ошибкам самому же будет намного проще дебажить.
    Пользователю же важно вывести понятную ошибку в интерфейсе.
    Ответ написан
    Комментировать
  • Вопрос про класс и его прототип?

    @karambafe
    и в прототипах не видно переменной , в которой лежит 'this'.


    Так она в this и не записана, надо вот так делать:
    this.popup = this // хотя это абсолютно бессмысленно


    И всё бы хорошо, но если методы записывать как прототипы, то 'close' перестаёт работать и в прототипах не видно переменной

    this.overlay.on('click', this.close);
    Тут идет потеря контекста, если сделать в методе close console.log(this), то увидите в this обычную DOM ноду, а не jq объект. Соответсвенно там и не будет метода removeClass

    //  Это решение проблемы, но не решение очень странного, на мой взгляд, кода
    Popup.prototype.close = function(){
      $(this).removeClass('open');
    }
    Ответ написан
    2 комментария
  • По клику на кнопку получить следующий/предыдущий день?

    @karambafe
    На learn.javascript очень хорошо описана работа с датой и временем в JS:


    Например, нужно увеличить на 2 дня дату «28 февраля 2011». Может быть так, что это будет 2 марта, а может быть и 1 марта, если год високосный. Но нам обо всем этом думать не нужно. Просто прибавляем два дня. Остальное сделает Date:

    var d = new Date(2011, 1, 28);
    d.setDate(d.getDate() + 2);
    
    alert( d ); // 2 марта, 2011



    Ссылка
    Ответ написан
    1 комментарий
  • Почему Vue.js возвращает __ob__: Observer?

    @karambafe
    Павел Корнилов все правильно написал, метод get у axios асинхронный, возвращает промис.

    Поэтому метод getPosts тоже нужно сделать асинхронным:
    async getPosts(author) {
       try {
         const { data } = await axios.get(`${options.serverUrl}/posts/${author}`);
         return data; 
      } catch(error) {
         return error; // важный момент, что будет возвращать функция при ошибках выполнения запроса на сервер
      }
     },


    Сделал небольшой пример на codeSanbox, файл App.vue.
    В консоли видна разница вывода для текущего метода getPosts и нового getPostsAsync

    p.s.
    Из контекста данного примера, на мой взгляд, метод getPosts достаточно бесполезный - увеличивает уровень абстракции, но не дает полноценное понимание кода.

    Я бы внес запрос к серверу прямо в метод loadPosts:
    async loadPosts () {
      this.loading = true; // вешаем лоадер на момент асинхронного запроса
    
      try {
         const { data } = await axios.get(`${options.serverUrl}/posts/${this.$route.params.id}`);
         this.posts = data;
         this.loading = false;
      } catch(error) {
         // делаем что-то в случае ошибки
         this.loading = false;
      }
    },
    Ответ написан
    Комментировать