Обещать!!! Все дело в обещании
Лучшие программисты ничуть не лучше, чем просто хорошие. Они на порядок лучше, если судить по любым стандартам: концептуальности, креативности, скорости, изобретательности дизайна или способности решать проблемы. - Рэндалл и Стросс
Предположим, пара собирается в отпуск, и вот разговор между двумя людьми.
Эмма: Эй! Можете ли вы изучить лучшие предложения и забронировать авиабилеты?
Мистер Обещание: Конечно!
Эмма: А пока я подготовлю багаж, но обязательно сообщи мне, найдешь ли ты билеты на самолет.
Мистер Обещание: Что, если я не найду билетов?
Эмма: Если вы нашли билеты, отправьте мне сообщение об успешном бронировании (успешный обратный вызов). Если вы их не нашли, отправьте мне сообщение о том, что отпуск отложен (обратный вызов при сбое).
Звучит интересно, правда? В этой статье я обращусь к:
- Что такое обещание?
- Как их можно использовать?
- Преимущества и недостатки использования обещаний.
Javascript - это однопоточный язык сценариев. Все происходит в последовательности, как написано, построчно. Но асинхронные операции выполняются в том порядке, в котором они завершаются. Обещание - это стандартный способ работы с асинхронным кодом.
Предположим, вы пытаетесь получить данные с помощью вызова веб-API, вы можете получить недопустимые данные или ошибку при получении данных. Но ваша задача - показывать только достоверные данные. Здесь вызов веб-API - это асинхронная операция. В этом сценарии Promise помогает вам, имея два аргумента разрешить и отклонить, оба они заполняются успешными и неудачными операциями соответственно.
Обещание имеет три состояния:
- В ожидании: ждем ответа
- Решить: успех произошел
- Отклонить: произошла ошибка
Давайте углубимся в обещания на примере. Предположим, у вас есть 3 обещания себе на этот год, и они должны купить сотовый телефон, велосипед, машину.
Создание обещания
Начиная с вашего первого обещания, вы пошли в выставочный зал, чтобы купить сотовый телефон, и вы можете изучить несколько мобильных телефонов, чтобы решить. Изучение сотовых телефонов требует времени и представляет собой асинхронную операцию. После поиска вы можете получить один телефон (выполнение обещания) или не купить телефон (отклонение обещания).
Здесь мы создали объект обещания JavaScript, имеющий два параметра: разрешение и отклонение. Во время использования обещания, если обещание разрешено, мы получаем значение с помощью функции then (). Если обещание отклонено, мы получаем сообщение об ошибке в функции catch ().
Поглоти обещание
Наконец-то вы нашли нужный телефон, и это означает, что обещание выполнено и сообщение из обещания будет отправлено в функцию then ().
Promise.all
До сих пор мы имели дело с одним обещанием, касающимся покупки телефона, но у вас есть еще два обещания, верно ?? Покупка байка и машины. Мы можем запускать несколько обещаний одновременно, используя Promise.all.
- Promise.all снова является обещанием и ждет, пока все обещания не будут выполнены или одно будет отклонено.
- Если все обещания разрешены, Promise.all разрешается с помощью массива сообщений из разрешенных обещаний (входных обещаний).
- Если отклоняется только одно из обещаний, Promise.all отклоняется по причине из первого обещания в итерируемом объекте, который был отклонен.
Создание других обещаний, а также похожих на мобильный.
Мы создали все обещания для мобильного телефона, велосипеда и автомобиля. Наш следующий шаг - запустить все обещания в одном экземпляре, чтобы сэкономить время.
Вышеупомянутое обещание будет отклонено, если любое из ваших обещаний мобильного / велосипедного / автомобильного будет отклонено, и Promise.all будет разрешен, если все обещания в массиве будут разрешены.
Цепочка обещаний
Предположим, вы хотите купить машину только после покупки велосипеда и покупки велосипеда после мобиля. Это означает, что ваши покупки зависят от других покупок, поскольку мы хотим делать их по порядку. Мы называем это цепочкой обещаний.
Здесь мы возвращаем объект обещания в блоке then / catch другого обещания. Выполнять другие обещания тогда и только тогда, когда текущее обещание выполнено или отклонено.
Если любое из обещаний будет отклонено, мы войдем в блок catch (). Это можно использовать, если вы хотите обновить сетку только после получения данных от веб-службы.
Недостатки обещания
Да, обещания используются для асинхронных операций, но у них также есть несколько недостатков.
- Необходимо написать много кода, мы должны написать. Затем создать анонимную функцию для обработки ответа или присвоения им имен. Для связывания мы должны вложить код.
- Нам нужно выполнить явную обработку ошибок, если мы получим какую-либо ошибку в функциях обратного вызова.
- Управлять несколькими обещаниями в цепочке очень сложно. Когда в цепочке 10 обещаний, ошибка, возвращаемая цепочкой обещаний, не дает представления о том, где произошла ошибка.
Чтобы преодолеть обещания, JavaScript представил параметр async / await. Async / await позволяет создавать чистый и читаемый код для обработки асинхронных операций.
Вы можете проверить приведенную ниже статью, чтобы получить четкое представление об Async / Await и о том, как они преодолевают обещания.
Надеюсь, вам понравилось! В следующей статье я расскажу об операции async / await и сделаю ее более интересной.