На этой неделе я начал седьмую неделю учебного курса по программированию Flatiron, третий модуль, посвященный Javascript. Сначала я думал, что он будет очень похож на Ruby с некоторыми синтаксическими отличиями, но Javascript настолько глубок и требует понимания.

Что мне действительно нравится в javascript, так это то, насколько он может улучшить взаимодействие с пользователем, добавляя плавности в веб. Это динамический язык, что означает, что он выполняет во время выполнения многие вещи, которые статический язык выполняет во время компиляции.

Поскольку JavaScript — это язык, управляемый событиями, он будет продолжать выполняться при прослушивании других событий, а не ждать ответа, прежде чем двигаться дальше.

Асинхронность в компьютерном программировании означает возникновение событий независимо от хода программы и способы обработки таких событий.

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

Но когда у вас есть обратный вызов, вложенный в обратный вызов, код имеет тенденцию быть немного менее читаемым и может начать запутываться. Это то, что известно как «ад обратного вызова».

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

Еще один способ избавиться от «ада обратных вызовов» — это промисы.

Обещание — это объект, обертывающий асинхронную операцию и служащий прокси для значения, которое не всегда известно при создании обещания. Это позволяет асинхронным методам возвращать значения, как и синхронным методам: вместо немедленного возврата окончательного значения асинхронный метод возвращает обещание предоставить значение в какой-то момент в будущем.

Обещание — это объект, который оборачивает асинхронную операцию и уведомляет, когда она выполнена. В отличие от обратного вызова, промис имеет свои собственные методы, которые вы вызываете, чтобы сообщить промису, что произойдет в случае его успешного или неудачного выполнения. Этими методами являются .then(), когда доступен успешный результат, и .catch(), когда возникает ошибка.

Вместо вложенных обратных вызовов Promises все вызовы .then() объединяются вместе, чтобы либо вернуть новый Promise, либо значение, либо объект, который будет передан следующему .then() в цепочке. При использовании .catch() есть некоторые отличия от .then(); .catch() нужно вызывать только один раз, даже если мы делаем два разных асинхронных запроса, потому что любая ошибка, возникающая в цепочке промисов, остановит дальнейшее выполнение, и ошибка закончится в следующем .catch() в цепочке.

Обобщить:

  • Асинхронный код похож на выполнение хора, и вместо того, чтобы ждать, пока закончится стирка, прежде чем мыть посуду, вы можете помыть посуду, убрать ванную и подмести до того, как одежда закончит стирку. После стирки одежды ее можно положить в сушилку, а затем сложить.
  • Обратный вызов будет помещать одежду в сушилку после того, как одежда, наконец, закончила стирку. Тогда складывание одежды будет еще одним обратным вызовом, но тогда мы будем вкладывать обратные вызовы.
  • Вместо этого мы можем добавить обещание, в котором говорится, что как только одежда закончит стирку .then(), мы должны положить одежду в сушилку .then() и сложить ее. Но пока одежда проходит цикл, мы все еще можем выполнять другие задачи, такие как мытье посуды, уборка в ванной и подметание.

Это очень базовое понимание обратных вызовов и промисов, но это хорошая отправная точка для создания более чистого и эффективного кода javascript.