Написание асинхронных программ на JavaScript

Нет сомнений в том, что JavaScript, несмотря на свою историю, сегодня стал одним из самых популярных языков программирования. JavaScript из-за своей асинхронной природы может представлять некоторые проблемы для тех, кто плохо знаком с этим языком. В этой статье мы собираемся написать небольшие асинхронные программы, используя промисы и async/await. Используя эти примеры, мы собираемся определить некоторые простые шаблоны, которые вы можете использовать для своих собственных программ.

Если вы новичок в JavaScript, вы можете сначала проверить мои другие
статья до прочтения этого.

Все примеры кода в этой статье написаны для среды Node. Если у вас не установлен Node, инструкции можно найти в Приложении 1. Несмотря на то, что все программы написаны для Node, вы можете применить те же принципы для сценариев, работающих в браузере. Кроме того, все примеры кода для этой статьи доступны на Гитлаб.

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

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

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

В этой статье мы рассмотрим пару коротких асинхронных программ. Мы
мы начнем с простых программ и постепенно перейдем к более сложным
те. Ниже приведен обзор сценариев, которые мы собираемся написать:

  • Сценарий, который записывает содержимое файла в новый файл.

  • Скрипт, который записывает содержимое нескольких файлов в новые файлы.

  • Скрипт, который анализирует и форматирует CSV-файлы в каталоге и выводит новый CSV-файл.
    файлы в другую папку.

Давайте уделим немного времени и быстро рассмотрим основы промисов и async/await.

Обещания

  • Обещание — это объект, представляющий результат асинхронного
    операция.

  • Обещание либо разрешается со значением «успех», либо отклоняется с
    значение «неудачи».

  • Вообще говоря, доступ к разрешенным значениям осуществляется с помощью аргумента обратного вызова
    а then блокировать. И отклоненные значения — это доступ с аргументом обратного вызова
    к catch блокировать.

  • В современных средах JavaScript вы можете получить доступ к конструктору промисов.
    через глобальный объект как Promise.

  • Обещание может быть создано с помощью Promise конструктор с помощью new
    ключевое слово. То есть:

    const p = new Promise((r, j) => {});
    

    r обратный вызов используется для разрешения промиса со значением и j
    обратный вызов используется для отклонения обещания.

  • Promise конструктор имеет несколько полезных статических методов, таких как all, race,
    resolveа также reject. all метод принимает массив обещаний и
    попытается решить их все одновременно и вернет обещание, что
    разрешается в массив с разрешенными значениями. race методы занимают
    массив обещаний и разрешает или отклоняет первое завершенное обещание.
    resolve метод создает обещание и разрешает его в заданное значение.
    reject метод создает обещание и отклоняет его с заданным значением.

Асинхронно/ждите

  • Назначение функций async/await — упростить поведение при использовании
    промисы синхронно и выполнять некоторое поведение с группой промисов.
    Из MDN

  • Точно так же, как промисы похожи на структурированные обратные вызовы, async/await подобны
    к объединению генераторов и промисов. Из MDN

  • Функцию можно пометить как асинхронную с помощью async ключевое слово.
    То есть: async function hello() {} или же const hello = async() => {};.

  • Ан async функция всегда возвращает обещание. Если значение возвращается из
    async функция, она будет неявно заключена в обещание.

  • Если возникает неперехваченное исключение внутри async функция,
    возвращенное обещание отклоняется с исключением.

  • await оператор может использоваться внутри async функция перед операторами
    которые возвращают обещание. В этом случае выполнение функции «приостанавливается».
    пока обещание не будет разрешено или отклонено.

  • await оператор действителен только внутри async функция.

Вы можете прочитать остальную часть статьи на Medium.com

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *