Как сгенерировать ошибки из асинхронных функций в Javascript?

  1. Как сгенерировать ошибки из асинхронных функций в Javascript: чему вы научитесь
  2. Как сгенерировать ошибки из асинхронных функций в Javascript: требования
  3. Как сгенерировать ошибки из асинхронных функций в Javascript: тестирование исключений
  4. Как сгенерировать ошибки из асинхронных функций в Javascript: завершение

Можно ли выкидывать ошибки из асинхронных функций в Javascript ?

выкидывать ошибки из асинхронных функций в Javascript

Тема освещалась сотни раз, но давайте посмотрим на это с точки зрения TDD .

Ответьте на вопрос, не глядя на Stackoverflow. Если вы знаете ответ, я впечатлен.

Если нет, то это тоже круто. Продолжайте читать, и вы найдете это!

Как сгенерировать ошибки из асинхронных функций в Javascript: чему вы научитесь

В следующем посте вы узнаете:

  • как бросать ошибки из асинхронных функций в Javascript
  • как проверить исключение из асинхронных функций с помощью Jest

Как сгенерировать ошибки из асинхронных функций в Javascript: требования

Чтобы следовать, вы должны иметь:

  • базовое понимание Javascript и ES6
  • рабочая установка Node.Js и Шутка

Используйте исключения, а не коды возврата (Чистый код) .

Бросать ошибки - лучшая практика для борьбы с неизвестными. То же правило применяется ко всем современным языкам: Java, Javascript, Python, Ruby.

Вы можете выбросить ошибки из функции, рассмотрите следующий пример в Javascript:

function upperCase (name) {if (typeof name! == "string") {throw TypeError ("name должно быть строкой"); } return name.toUpperCase (); } module.exports = upperCase;

И вот тест для этого (я использую Jest):

«использовать строгое»; const assert = require ("assert"); const upperCase = require ("../ function"); description ("upperCase function", () => {test ("выдает, когда имя не указано", () => {assert.throws (() => upperCase ());}); test ("выдает когда имя не является строкой ", () => {assert.throws (() => upperCase (9));});});

Вы также можете выдавать ошибки из классов ES6.

Я всегда добавляю конструктор для неожиданных значений при написании классов в Javascript.

Придуманный пример:

class Person {constructor (name) {if (typeof name! == "string") {throw TypeError ("name должно быть строкой"); } this.name = name; } // какой-то метод здесь} module.exports = Person;

И вот тест для класса:

«использовать строгое»; const assert = require ("assert"); const Person = require ("../ index"); description ("Класс Person", () => {test ("выдает, когда имя не указано", () => {assert.throws (() => new Person ());}); test ("it бросает, когда имя не является строкой ", () => {assert.throws (() => new Person (9));});});

Тест действительно проходит:

PASS test / index.test.js Класс Person ✓ выдает, когда имя не указано (1ms) ✓ выдает, когда имя не является строкой

Ухоженная!

Таким образом, все работает, как и ожидалось, вне зависимости от того, используете ли вы обычную функцию, конструктор класса (или метод).

Что если я захочу выдать ошибку из асинхронной функции ?

Могу ли я все еще использовать assert.throws в моем тесте?

Давайте разберемся.

Как сгенерировать ошибки из асинхронных функций в Javascript: тестирование исключений

Итак, вы знаете, что Javascript асинхронные функции не так ли?

Учитывая предыдущий класс:

class Person {constructor (name) {if (typeof name! == "string") {throw TypeError ("name должно быть строкой"); } this.name = name; } // какой-то метод здесь} module.exports = Person;

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

Давайте обновим класс:

class Person {constructor (name) {if (typeof name! == "string") {throw TypeError ("name должно быть строкой"); } this.name = name; } async getData (url) {if (typeof url! == "string") {throw TypeError ("url должен быть строкой"); } // const response = await fetch (url) // do stuff}} module.exports = Person;

Что произойдет, если я выполню код?

Давай попробуем:

const Person = require ("../ index"); const valentinogagliardi = новый человек ("valentinogagliardi"); valentinogagliardi.getData ();

И вот оно:

UnhandledPromiseRejectionWarning: необработанное отклонение обещания (идентификатор отклонения: 1): TypeError: name должно быть строкой DeprecationWarning: необработанное отклонение обещания не рекомендуется. В будущем отклонения обещаний, которые не обрабатываются, завершат процесс Node.js с ненулевым кодом завершения.

Неудивительно, что асинхронный метод возвращает отклонение Promise, но он не выдает в строгом смысле.

Ошибка заключена в отклонении обещания. Другими словами, я не могу использовать assert.throws для тестирования.

Давайте подтвердим с тестом:

«использовать строгое»; const assert = require ("assert"); const Person = require ("../ index"); description ("Методы Person", () => {test ("выдает, когда url не является строкой", () => {const valentinogagliardi = new Person ("valentinogagliardi"); assert.throws (() => valentinogagliardi .получить данные()); }); });

Тест не проходит, как ожидалось!

FAIL test / index.test.js Методы Person ›выдает, когда url не является строкой assert.throws (function) Ожидается, что функция выдаст ошибку. Но это ничего не бросало. Сообщение: отсутствует ожидаемое исключение.

Так? В чем подвох ? (Не каламбур предназначен). Барабанная дробь…

Асинхронные функции и асинхронные методы не выдают ошибки в строгом смысле .

Асинхронные функции и асинхронные методы всегда возвращают обещание, разрешенное или отклоненное.

Вы должны прикрепить then () и catch () , несмотря ни на что. (Или оберните метод внутри try / catch). Отклоненное обещание будет распространяться в стеке, если вы ловить это

Что касается теста, вот как это должно быть:

«использовать строгое»; const assert = require ("assert"); const Person = require ("../ index"); description ("Методы Person", () => {test ("он отклоняет, когда url не является строкой", async () => {hope.assertions (1); const valentinogagliardi = new Person ("valentinogagliardi"); await Ожидайте (valentinogagliardi.getData ()). rejects.toEqual (TypeError ("url должен быть строкой"));});});

Мы должны проверить не простое исключение, а отклонение с помощью TypeError.

Сейчас тест проходит:

PASS test / index.test.js Персональные методы ✓ отвергает, когда url не является строкой

А как насчет кода?

Чтобы поймать ошибку, вы должны выполнить рефакторинг следующим образом:

const Person = require ("../ index"); const valentinogagliardi = новый человек ("valentinogagliardi"); valentinogagliardi .getData () .then (res => res) .catch (err => console.error (err));

Теперь исключение будет отображаться в консоли:

TypeError: url должен быть строкой в ​​Person.getData (/home/valentino/Documenti/articles-and-broadcasts/throw-from-async-functions-2018-04-02/index.js:12:13) в Object. <anonymous> (/home/valentino/Documenti/articles-and-broadcasts/throw-from-async-functions-2018-04-02/index.js:22:4) // ...

Важно отметить, что если вам нравится больше попробовать / поймать.

Следующий код не поймает ошибку:

const Person = require ("../ index"); асинхронная функция, что угодно () {try {const valentinogagliardi = new Person ("valentinogagliardi"); await valentinogagliardi.getData (); // делать вещи с возможным результатом и что-то возвращать} catch (error) {throw Error (error); } } без разницы();

Помните: отклоненное обещание будет распространяться в стеке, если вы его не поймаете .

Чтобы правильно отловить ошибку в try / catch, вы должны выполнить рефакторинг следующим образом:

асинхронная функция, что угодно () {try {const valentinogagliardi = new Person ("valentinogagliardi"); await valentinogagliardi.getData (); // делать вещи с возможным результатом и что-то возвращать} catch (error) {throw Error (error); }} what (). catch (err => console.error (err));

Вот как это работает.

Как сгенерировать ошибки из асинхронных функций в Javascript: завершение

Подведем итог:

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

Чтобы перехватывать исключения из асинхронных функций, вы должны использовать catch () .

А вот правила тестирования исключений в Jest :

  • использование assert.throws для тестирования исключений в обычных функциях и методах
  • использование ожидать + отклоняет для тестирования исключений в асинхронных функциях и асинхронных методах

Спасибо за чтение и следите за обновлениями в этом блоге!

Я Валентино Гальярди, и я помогаю занятым людям освоить этот безумный современный JavaScript-материал. Я занимаюсь обучением и консультированием по JavaScript, React, Redux.

Давайте свяжемся!

Похожие

Как выглядит карта Интернета?
Internet-map.net Это может быть трудно визуализировать Интернет. Компании веб-трафика, такие как Alexa хорошо показывает относительный рейтинг сайтов, но как насчет связей между сайтами? Как они выглядят? Карта интернета это онлайн-проект, который стремится визуализировать такие метрики, как
Windows 10 - руководство пользователя, советы, настройка
Windows 10 прошел долгий путь и после многих обновлений и постоянного развития интуитивно понятен в использовании. Однако есть проблемы, решение которых несколько скрыто. В этом руководстве мы помогаем пользователям, которые не знают, как удалить пароль, отключить плитки в меню «Пуск», запустить аварийный режим или отключить брандмауэр. Мы предлагаем - шаг за шагом - что и как сделать, чтобы добиться успеха.
Как Google Maps может предсказать трафик
Одним из больших преимуществ Google Maps является, помимо встроенной функции навигации, возможность отображать трафик на нужном маршруте. Но как именно это работает? Часть этого ответа не порадует многих. Карты Google стали одной из самых популярных навигационных
Как опубликовать на эсперанто?
... как получить козырек на пишущих машинках или скадописах (редактирование «Pola Esperantisto», я использовал специально подготовленные розетки для копаков Брата), затем на компьютере и, наконец, в Интернете. ISO-8859-3 В последнее время стандарт ISO-8859-3, включающий все буквы эсперанто, наконец-то появится в мировой сети. Я медленно оставляю ужасные замены (например, буква + # или буква + x). Более того, новые версии браузеров Internet Explorer и Netscape Navigator принимают
Как скачать весь сайт для чтения в автономном режиме
... везде в наши дни вы можете оказаться без него время от времени. И когда вы это делаете, могут быть определенные веб-сайты, которые вы хотели бы сохранить и получить к ним доступ в автономном режиме - возможно, для исследований, развлечений или для потомков. Это достаточно легко сохранить отдельные веб-страницы для чтения в автономном режиме , но что, если вы хотите скачать весь
Как войти в среду загрузчика и восстановления Android
Есть случаи, когда необходимо войти в загрузчик Android или в системы восстановления - возможно, у ОС проблемы,
Живи как родной. Мы советуем как дешево снять квартиру на несколько дней за границей
При поиске предложения нам нужно знать, что нас интересует. Это только отдельная квартира только для нас, или, например, нам нужна комната в квартире, где проживают другие арендаторы . Давайте всегда читаем точное описание предложения и предлагаемые условия, чтобы избежать разочарования. Мы также рекомендуем оценить надежность хоста, то есть хоста. Некоторые веб-сайты облегчают это, публикуя систему рекомендаций, в которой мы можем прочитать мнения предыдущих
Браузерные войны, 2011
Не так давно, когда дело дошло до веб-браузеров, все было так же скучно, как использованная вода. Затем появился Firefox, и вдруг он перестал быть просто миром Internet Explorer. Сегодня, в 2011 году, веб-браузер Google Chrome, не говоря уже о Apple Safari и Opera Software Opera, является хорошим выбором для вашего веб-браузера. В частности, за последние несколько месяцев Chrome, Firefox и IE выпустили отличные новые версии. Сегодня у вас есть более богатый выбор высококачественных веб-браузеров,
Как не дарить нежелательные подарки - научное руководство
... как у дяди Зенека. И прекрасная фарфоровая кирпичная кладка, как раз для того, чтобы поставить на камин, которого ... у вас нет. Вы не хотите получать такие подарки? Так что начните дарить себе действительно хорошие подарки. Что? Наука советует. Вы презираете практические подарки? Они не всегда плохие. Иногда лучше сделать подарок, который действительно полезен, чем гаджет, который, вероятно, окажется на дне ящика. Доказательства?
Как использовать PS4 DualShock 4 для игр на ПК
... вать партнерские комиссии по ссылкам на этой странице. Условия эксплуатации , Назад, когда Sony впервые объявила, что DualShock 4 будет работать с Windows , Геймеры ПК по всему интернету приветствовали в унисон. К сожалению, это не совсем то, что мы ожидали. Хотя это правда, что контроллер PS4
Как исправить погоду гаджета в Windows Vista PL?
После установки польской версии Microsoft Windows Vista интересный и исключительно полезный гаджет, к сожалению, не работает. Об этом свидетельствует информация Служба в настоящее время недоступна на этом языке или в данном регионе . У пользователей самой богатой версии системы - Windows Vista Ultimate - есть решение: установить пакет на английском языке, изменить язык на загруженный и найти, например, Великобританию. Проблема исчезнет. Однако это не лучшее решение, тем более что

Комментарии

Если вы хотите блеск, вы хотите, чтобы он был плоским или текстурированным, как на монограмме буквы B?
Если вы хотите блеск, вы хотите, чтобы он был плоским или текстурированным, как на монограмме буквы B? Или, поскольку вы работаете в цифровом формате, может быть, вы хотите, чтобы по логотипу было мягкое пятно света с бликом от объектива и пингом в конце. (Будем надеяться, что нет.) Золото, использованное должным образом, по-прежнему несет в себе престиж, элегантность и утонченность 14K, как ни один другой цвет. Это цвет, которого ожидает публика, а приложение - нет.
Если вам нужны «шахтеры», кем они будут и как вы будете их компенсировать?
Если вам нужны «шахтеры», кем они будут и как вы будете их компенсировать? На большинстве современных блокчейнов, включая биткойны и Ethereum, «майнеры» проверяют согласованность блокчейнов и добавляют блоки. Они не делают эту работу бесплатно. ICO (первоначальные предложения монет) - все в моде, и легко представить себе выплату майнерам криптовалюты (в конце концов, это то, что делают биткойны и Ethereum), но трудно представить себе, что существующие предприятия выпускают собственные
Даже если вы не поделились своими результатами в Интернете, в глубине души вы все еще чувствуете себя самодовольным, потому что Что вы должны есть на обед?
Каковы ваши требования к производительности и как вы будете их выполнять? В настоящее время блокчейны биткойн и Ethereum обрабатывают около десятка транзакций в секунду. Для многих корпоративных приложений это слишком медленно, на несколько порядков. Вам нужно подумать о том, какого рода производительность вам нужна, и как вы ее получите. Есть ряд возможных решений, в том числе биткойн сеть молний ; замена «трудоемкого» «доказательства
Как получить, как запустить и, прежде всего, как настроить ваше оборудование, чтобы иметь возможность использовать бесплатный интернет?
Как получить, как запустить и, прежде всего, как настроить ваше оборудование, чтобы иметь возможность использовать бесплатный интернет? Ответ на эти вопросы вы найдете в следующем руководстве.
9. Как я могу исправить внутренние ошибки процессора (IERR) и ошибки проверки компьютера процессора?
9. Как я могу исправить внутренние ошибки процессора (IERR) и ошибки проверки компьютера процессора? Ошибка «Внутренняя ошибка ЦП (CPU IERR)» или «Ошибка проверки ЦП» обычно не является ошибкой самого ЦП, а свидетельствует о том, что ЦП обнаружил неисправность в системе или получил ошибочную инструкцию от системного компонента. Теоретически это может быть связано со всеми компонентами системы, но в большинстве случаев это вызвано ошибкой памяти. Подробную информацию о CPU IERR можно найти
Делай все возможное, чтобы составить хорошо написанный документ Как написать бизнес-план Как написать бизнес-план Вы собираетесь начать свой собственный бизнес?
9. Как я могу исправить внутренние ошибки процессора (IERR) и ошибки проверки компьютера процессора? Ошибка «Внутренняя ошибка ЦП (CPU IERR)» или «Ошибка проверки ЦП» обычно не является ошибкой самого ЦП, а свидетельствует о том, что ЦП обнаружил неисправность в системе или получил ошибочную инструкцию от системного компонента. Теоретически это может быть связано со всеми компонентами системы, но в большинстве случаев это вызвано ошибкой памяти. Подробную информацию о CPU IERR можно найти
И как у вас с этим - если ясно, что вы шутите с Google, вы уже сделали правильные карты?
И как у вас с этим - если ясно, что вы шутите с Google, вы уже сделали правильные карты? Вы созрели, осознавая, что в настоящее время это не только волшебный ключ к банкомату, а иногда даже может спасти вашу профессиональную жизнь? Ps. В то время как аккаунт мне удалось разблокировать, я нашел название фото на блог Михаила Бриса который, видимо, боролся с той же проблемой.
Тем не менее, если вы живете в Канаде или Европе, какой набор вы должны купить?
Тем не менее, если вы живете в Канаде или Европе, какой набор вы должны купить? Лучший OLED телевизор 4K от Panasonic Panasonic выпустила пару новых телевизоров в 2018 году, FZ800 и FZ950. FZ950 является флагманской моделью. Он поставляется с процессором HCX, динамическими LUT, Dolby Vision, поддержкой HDR10 +, динамическим оптимизатором сцены и 80-ваттным динамиком Technics. Поддержка HDR является заметным обновлением. В 2017 году Sony была единственной
А как насчет: Вы уже установили службу VPN и объединили ее с вашим Fire TV?
А как насчет: Вы уже установили службу VPN и объединили ее с вашим Fire TV? Или вы все еще ищете правильный инструмент? Где бы вы ни находились: оставьте нам комментарий и расскажите нам о своем опыте!
Как вы думаете, это может сработать?
Как вы думаете, это может сработать? А может, у меня сложилось впечатление, что классические телефоны совсем не устарели? Дайте мне знать, если вы все еще работаете над классическими телефонами во времена вездесущего Интернета. * Заголовок графика происходит с сайта Pexels
«что вы можете продемонстрировать», «какие замечательные источники вы нашли?
«что вы можете продемонстрировать», «какие замечательные источники вы нашли?»), фактические продажи (как заставить людей купить ваш продукт и фактически сделать это). В этом последнем аспекте я вижу самую сильную часть книги - ее авторы эффективно опровергли методы, которые многие «мастера» электронного бизнеса используют в Польше. Во время чтения приводятся конкретные примеры того, как НЕ продвигать свои работы. Примеры, которые очень часто встречаются на различных сайтах о зарабатывании денег

Throws в моем тесте?
Так?
Компании веб-трафика, такие как Alexa хорошо показывает относительный рейтинг сайтов, но как насчет связей между сайтами?
Как они выглядят?
Но как именно это работает?
Вы не хотите получать такие подарки?
Что?
Вы презираете практические подарки?
Доказательства?
Если вы хотите блеск, вы хотите, чтобы он был плоским или текстурированным, как на монограмме буквы B?

Новости