<MyRusakov.ru />

React JS, Redux, ES2015 с Нуля до Гуру

React JS, Redux, ES2015 с Нуля до Гуру

Данный курс - это обширный курс по JavaScript и фреймворку React, который позволит Вам с нуля создавать мощные современные, динамические JavaScript-приложения.

Вы узнаете о тонкостях работы с "профессиональным" JavaScript, а так же узнаете о нововведениях в его новый стандарт ES2015, Вы узнаете, как организовать профессиональное окружение для FrontEnd, изучите профессиональный фреймворк - ReactJS.

А в практической части с полного нуля будет создано мощное и быстрое динамическое приложение, где Вы на практике познакомитесь, как создавать очень гибкую и расширяемую архитектуру, для разработке функционала любой сложности.

Подробнее
Подписка

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Каким движком Вы предпочитаете пользоваться?

Введение в Async/Await в JavaScript

Введение в Async/Await в JavaScript

Многие программисты находятся в отношениях любви-ненависти с JavaScript. Одной из причиной этого является то, что сам язык пал жертвой одного из своих самых лучших качеств: его легко выучить, но трудно охватить все аспекты. Доказательством этому служит огромное количество заблуждений относительно тех или иных свойств языка: человек думает что, вот эта штука работает так, тогда как на самом деле все наоборот. И в JavaScript такое сплошь и рядом.

Вот, например, множество заблуждений относительно классов в JavaScript. JavaScript не имеет настоящих классов, все что мы называем классами и что имеет вид классов - на самом деле это все Прототипы - объекты, от которых наследуются другие объекты. Поэтому, это означает, что "классы" в JavaScript не ведут себя в точности также как и обычные классы. Если класс - это своего рода чертеж, на основе которого создается объект, то прототип - это объект, которому другие объекты делегируют некую работу. Т.е. прототип - это не чертеж, - это реально существующий объект.

Вот именно поэтому, существует возможность добавления нового метода в объект Array, после чего у всех объектов данного типа появится этот метод, прямо во-время исполнения.

var someArray = [1, 2, 3];

Array.prototype.Lalala = function() {
  console.log('Ла-ла-ла; Новый метод');
};

someArray.Lalala(); // Ла-ла-ла; Новый метод

// Код выше не будет работать с реальными классами, так как изменение описания класса не влияет на сами объекты

Короче говоря,классы в JavaScript - это синтаксический сахар для Прототипного наследования.

Таким образом, моя главная цель в этих и следующих статьях дать вам понимание того, как работает язык в действительности. И это важно, в том случае, если вы хотите как можно полнее понять язык JavaScript.

Спецификация Async/Await

Данные парные конструкции делают попытку решить одну из крупнейших проблем языка, с самого начала его существования: асинхронность.

На протяжении многих лет, при работе с асинхронным кодом лет мы полагались на Callback-функции:

setTimeout(function() {
  console.log('Потом, около 13 млрд. лет назад произошел большой  взрыв');
}, 5000);

console.log('Сначала была тьма');

Callback-функции прекрасно решают задачу, до тех пор пока не появляется потребность выполнить последовательность асинхронных операций:

doThingOne(function() {
  doThingTwo(function() {
    doThingThree(function() {
      doThingFour(function() {
        // раз два три
      });
    });
  });
});

Такая конструкция понятна компьютеру, но сложна для человека, который вынужден разбирать эти вложенные уровни. И вот тут-то на сцену выходят Промисы - JavaScript Обещания.

Смотрите: обещания

Промисы - очень прагматичный путь работы с асинхронным кодом. Представляют собой они объекты, реализующие некую асинхронную задачу, которая выполниться либо через секунду, либо через минуту, либо...

function buyCoffee() {
  return new Promise((resolve, reject) => {
    asyncronouslyGetCoffee(function(coffee) {
      resolve(coffee);
    });
  });
}

Функция buyCoffee возвращает объект Promise, представляющий процесс приобретения кофе. А функция resolve сигнализирует успешное завершение, оно получает в качестве аргумента значение, которое затем может быть использовано далее.

Объект Promise имеет два основных метода:

  • then: запускает callback-функцию, обрабатывающую результат
  • catch: вызывает callback-функцию, обрабатывающую ошибки

Также у объекта Promise есть другие интересные свойства, которые позволяют создавать цепочки вызовов.

buyCoffee()
  .then(function() {
    return drinkCoffee();
  })
  .then(function() {
    return doWork();
  })
  .then(function() {
    return getTired();
  })
  .then(function() {
    return goToSleep();
  })
  .then(function() {
    return wakeUp();
  });

Как видите, этот листинг выглядит намного лучше, чем тот который был бы написан с помощью callback-функций.

Таким образом в данной статье мы поговорили о том, что стоит за асинхронными операциями в JavaScript, а в следующей статье мы непосредственно познакомимся с ключевыми словами async/await в JavaScript.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (0):

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.