Skip to content

Promise through pictures

Nasimi Mamedov edited this page Aug 7, 2023 · 1 revision

🐸 Промис в картинках

Промис - это объект-администратор асинхронного процесса

Создается с помощью конструктора Promise

Он ничего не знает о процессе, который администрирует, но знает порядок вызова исполнителей

Ему нужно просто указать исполнителей

Исполнители - это функции

Предположим, вам выслали бандероль

"Новая почта" - функция, которая выполняет доставку бандероли

Она может доставить нам бандероль, а может потерять ( испортить ) отправление

Мы ждем доставку бандероли

Но при этом жизнь не останавливается, и мы не сидим день и ночь на ступеньках отделения "Новой почты"

Мы создаем объект, имеющий состояние - промис 🤖

Состояние объекта-промиса при создании - ожидание ⏳

Этот объект и будет сидеть вместо нас на ступеньках "Новой почты"

Его состояние ⏳ может в любой момент измениться на ✅ или ⛔

Сообщаем ему, какой процесс отслеживать - передаем ему функцию-исполнителя процесса 📮

В этой функции описан процесс, что и откуда должна доставить "Новая почта"

У этой функции есть два формальных параметра ( предположим, в бланке заказа нужно указать номера телефонов, по которым звонить в случае чего )

Эти формальные параметры - часть протокола действий функции-исполнителя при завершении процесса доставки:

📦 кому звонить, если бандероль благополучно доставлена
💥 кому звонить, если бандероль потерялась или испорчена
var 🤖 = new Promise (
 
    function ( 📦, 💥 ) {
        ...
        if ( 👍 ) 📦()
        else 💥()
    }
)

Итак, формальные параметры 📦, 💥 есть, но их значения пока не определены

Формально процедура описана

Осталось "заключить договор" и заполнить все бланки

В этом месте и подключается наш объект-промис 🤖

Мы должны проинформировать его, 📦 кому звонить, если бандероль благополучно доставлена ( наш сосед дядя Вася 👨‍⚕️ зайдет получить ее ) 💥 кому звонить, если бандероль потерялась или испорчена ( наш адвокат 👨🏻‍🎓 займется этой проблемой )

Как сообщить 🤖, что делать?

а у него есть методы then и catch, с помощью которых мы и передадим "номера телефонов":

🤖.then ( 👨‍⚕️ ).catch ( 👨🏻‍🎓 )

Когда наша посылка будет доставлена, состояние нашего объекта-промиса изменится на ✅ и сработает then ( будет вызван 👨‍⚕️ )

Если же станет известно, что посылка была испорчена или утеряна, то состояние нашего объекта-промиса станет ⛔ и сработает catch ( будет вызван 👨🏻‍🎓 )

Таким образом, созданный нами 🤖 - это объект, в который мы "завернули" процесс доставки-получения бандероли, расписав исполнителей, чтобы больше не заморачиваться

var 🤖 = new Promice ( 📮 ( 📦, 💥 ) )
🤖.then ( 👨‍⚕️ ).then ( 👨🏻‍🎓 )

где 📦 и 💥 - формальные параметры, значения которых передаются промису 🤖 через then и catch

  • 📦 получит фактическое значение 👨‍⚕️,
  • 💥 получит фактическое значение 👨🏻‍🎓

© Nasimi Mamedov 2018

Курсы были созданы для студентов A-Level Ukraine.

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

A-Level Ukraine


1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19

Занятие 1

⤵️

Занятие 2

⤴️ ⤵️

Занятие 3

⤴️ ⤵️

Занятие 4

⤴️ ⤵️

Занятие 5

⤴️ ⤵️

Занятие 6

⤴️ ⤵️

Занятие 7

⤴️ ⤵️

Занятие 8

⤴️ ⤵️

Занятие 9

⤴️ ⤵️

Занятие 10

⤴️ ⤵️

Занятие 11

⤴️ ⤵️

Занятие 12

⤴️ ⤵️

Занятие 13

⤴️ ⤵️

Занятие 14

⤴️ ⤵️

Занятие 15

⤴️ ⤵️

Занятие 16

⤴️ ⤵️

Занятие 17

⤴️ ⤵️

Занятие 18

⤴️ ⤵️

Занятие 19

⤴️ ⤵️

⤴️

ico20 Дополнительно
dir-20 Справочная инфо

Clone this wiki locally