Обещать!!! Все дело в обещании

Лучшие программисты ничуть не лучше, чем просто хорошие. Они на порядок лучше, если судить по любым стандартам: концептуальности, креативности, скорости, изобретательности дизайна или способности решать проблемы. - Рэндалл и Стросс

Предположим, пара собирается в отпуск, и вот разговор между двумя людьми.

Эмма: Эй! Можете ли вы изучить лучшие предложения и забронировать авиабилеты?

Мистер Обещание: Конечно!

Эмма: А пока я подготовлю багаж, но обязательно сообщи мне, найдешь ли ты билеты на самолет.

Мистер Обещание: Что, если я не найду билетов?

Эмма: Если вы нашли билеты, отправьте мне сообщение об успешном бронировании (успешный обратный вызов). Если вы их не нашли, отправьте мне сообщение о том, что отпуск отложен (обратный вызов при сбое).

Звучит интересно, правда? В этой статье я обращусь к:

  1. Что такое обещание?
  2. Как их можно использовать?
  3. Преимущества и недостатки использования обещаний.

Javascript - это однопоточный язык сценариев. Все происходит в последовательности, как написано, построчно. Но асинхронные операции выполняются в том порядке, в котором они завершаются. Обещание - это стандартный способ работы с асинхронным кодом.

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

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

  1. В ожидании: ждем ответа
  2. Решить: успех произошел
  3. Отклонить: произошла ошибка

Давайте углубимся в обещания на примере. Предположим, у вас есть 3 обещания себе на этот год, и они должны купить сотовый телефон, велосипед, машину.

Создание обещания

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

Здесь мы создали объект обещания JavaScript, имеющий два параметра: разрешение и отклонение. Во время использования обещания, если обещание разрешено, мы получаем значение с помощью функции then (). Если обещание отклонено, мы получаем сообщение об ошибке в функции catch ().

Поглоти обещание

Наконец-то вы нашли нужный телефон, и это означает, что обещание выполнено и сообщение из обещания будет отправлено в функцию then ().

Promise.all

До сих пор мы имели дело с одним обещанием, касающимся покупки телефона, но у вас есть еще два обещания, верно ?? Покупка байка и машины. Мы можем запускать несколько обещаний одновременно, используя Promise.all.

  1. Promise.all снова является обещанием и ждет, пока все обещания не будут выполнены или одно будет отклонено.
  2. Если все обещания разрешены, Promise.all разрешается с помощью массива сообщений из разрешенных обещаний (входных обещаний).
  3. Если отклоняется только одно из обещаний, Promise.all отклоняется по причине из первого обещания в итерируемом объекте, который был отклонен.

Создание других обещаний, а также похожих на мобильный.

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

Вышеупомянутое обещание будет отклонено, если любое из ваших обещаний мобильного / велосипедного / автомобильного будет отклонено, и Promise.all будет разрешен, если все обещания в массиве будут разрешены.

Цепочка обещаний

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

Здесь мы возвращаем объект обещания в блоке then / catch другого обещания. Выполнять другие обещания тогда и только тогда, когда текущее обещание выполнено или отклонено.

Если любое из обещаний будет отклонено, мы войдем в блок catch (). Это можно использовать, если вы хотите обновить сетку только после получения данных от веб-службы.

Недостатки обещания

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

  1. Необходимо написать много кода, мы должны написать. Затем создать анонимную функцию для обработки ответа или присвоения им имен. Для связывания мы должны вложить код.
  2. Нам нужно выполнить явную обработку ошибок, если мы получим какую-либо ошибку в функциях обратного вызова.
  3. Управлять несколькими обещаниями в цепочке очень сложно. Когда в цепочке 10 обещаний, ошибка, возвращаемая цепочкой обещаний, не дает представления о том, где произошла ошибка.

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

Вы можете проверить приведенную ниже статью, чтобы получить четкое представление об Async / Await и о том, как они преодолевают обещания.



Надеюсь, вам понравилось! В следующей статье я расскажу об операции async / await и сделаю ее более интересной.