[MUSIC]
Когда мы говорили об услугах в предыдущем модуле, я упомянул
о обещаниях, а потом пообещал, что вернусь к обещаниям в этом модуле.
Итак, вот мы, я собираюсь выполнить свое обещание вам.
Синхронные вычисления повсюду во всемирной паутине.
И как работает интернет.
Если вы идете из мира последовательного программирования,
обертывание головы вокруг синхронного вычисления занимает довольно много усилий.
Было много попыток сделать асинхронные вычисления настолько безболезненными, насколько это возможно для людей, переходящих в него из книги последовательных вычислений.
Одна из таких попыток заключается в том, чтобы облегчить асинхронные вычисления
, это обещания.
Как мы понимаем, когда мы делаем любой запрос на любую услугу
или на бэкенд-сервер,
это займет некоторое время, чтобы результаты стали доступными для нас.
Если мы делаем такой запрос в то время как мы продолжаем нашу работу,
то существует высокая вероятность того, что наши вычисления застрянут в точке,
ожидая результатов.
Это нет-нет с точки зрения хорошего пользовательского опыта.
Поэтому важно, чтобы всякий раз, когда ваши результаты будут занимать время
, вы могли двигаться вперед, не дожидаясь правил.
И именно здесь асинхронные вычисления приходят вам в преимущество.
В асинхронных вычислениях, когда вы отправляете запрос
вы ожидаете, что результаты вернутся позже, а
вы должны иметь возможность иметь дело с тем фактом, базовые результаты возвращаются в то время
гораздо позже, чем там, где вы были в момент, когда вы сделали запрос.
Обещания предоставляют нам способ справиться с этим.
Давайте рассмотрим обещания чуть более подробно в этой лекции.
И тогда мы также увидим использование обещаний
в нашем угловом приложении немного позже.
Обещания, общая концепция является очень обширной областью сама по себе.
И в этом курсе у меня нет времени на детали обещаний.
Это станет целым курсом само по себе.
Я дам вам только основные обещания, которые необходимы
нам, чтобы понять, как использовать обещания в рамках нашего углового приложения.
Я предоставлю вам много лидов к дополнительным
ресурсам, где вы можете пойти и изучить обещания более подробно.
Итак, возвращаясь к этому вопросу, что именно такое обещание?
Обещание - это механизм, который поддерживает асинхронные вычисления.
Я просто дал длинное объяснение того, почему асинхронные вычисления
необходимы для работы Интернета.
Теперь, используя обещание, обещание предоставляет механизм или
прокси для значения, которое недоступно в момент, когда вы его запрашиваете.
Таким образом, обещание вернет вам обещание, сказав, что
, когда результат станет доступным, он вернется и доставит вам результаты.
Таким образом, обещание возвращает вам прокси-объект, и вы держитесь за прокси-объект.
И этот прокси-объект даст вам доступ к результатам, когда они станут доступны.
И есть метод в том, как вы ждете результатов.
Вы на самом деле не приостанавливаете свои вычисления в этот момент, вместо этого вы
настраиваете способ принятия результатов, когда он возвращается из этого обещания.
В двух словах,
обещание представляет собой значение, которое будет доступно в будущем.
Он также может быть немедленно доступен,
в этом случае обещание вернет значение немедленно.
Но в случае, если он должен вернуть значение в будущую дату, то он дает вам
обещание, что это значение, когда оно станет доступным, будет возвращено вам.
Всегда есть возможность, что обещание не может быть выполнено,
, потому что результаты недоступны по какой-либо причине.
В этом случае вам будет доставлена ошибка, или отклонение будет доставлено
, и вам предстоит разобраться с тем, что обещание было отклонено.
Мы смотрим, как мы справляемся с этим в следующем слайде.
Как мы узнали ранее, обещание является прокси-сервером для
то, что должно произойти в будущем или может никогда не произойти в будущем.
Так что обещание, когда оно будет дано вам, будет в состоянии ожидания.
Теперь, когда обещание решится, то есть результаты становятся доступными и
обещание может доставить вам результаты, то обещание решится или
выполнит.
И в этом случае обещание перейдет из состояния ожидания в разрешение или
состояние выполнения.
Таким образом, в этот момент ваши результаты доступны для вас.
Есть небольшой шанс, что обещание может быть отклонено из-за ошибки,
или какой бы то ни было причиной.
В этом удаленном случае
вам будет доставлен отказ, и в этом случае обещание будет считаться в отклоненном состоянии, когда отклонение будет доставлено.
Итак, когда вы генерируете обещание, как я уже сказал,
обещание - это прокси-объект, который доставляется вам.
Итак, когда вы даете обещание кому-то, обещание внутренне будет иметь
функцию, которая будет иметь дело как с разрешением, так и
вариантов отклонения внутри.
Когда вы пишете код,
вы увидите, что вы будете писать код как новый Promise (функция (разрешение, отклонение).
Так что независимо от того, будет ли он разрешен или он будет отклонен, мы должны иметь возможность отправить
обратно информацию тому, кому мы дали обещание.
Как мы это делаем в коде?
Давайте посмотрим на это в следующем слайде.
Вот пример того, как обещание настроено в коде.
Действительно, этот пример является результатом упражнения, которое вы сделаете
немного позже.
Таким образом, когда мы настраиваем наш сервис
возвращает обещание компоненту, который запрашивает данные из сервиса.
Итак, когда обещание возвращается,
, то обещание возврата доступно вам как объект.
И это обещание предоставляет два метода: метод then и catch.
Теперь, тогда, обещание успешно решено.
Тогда обещание приведет
к вызову решения.
Как вы видели, обещание построено, и внутри обещания
у вас есть функция, разрешение и отклонение, как два параметра.
Поэтому, если обещание успешно сможет доставить результат,
, то он вызовет метод разрешения, а затем вернет результат вам.
Где результат становится реальностью?
Когда вы пишете код, ожидающий
обещания, вы бы указали, что делать, когда обещание возвращает результат
в опции then для этого обещания.
Так скажем, например, вы бы сказали getDishes.then и внутри затем
вы поставите функцию, которая будет иметь дело с результатом, когда он придет в.
Если обещание не может решить правильно, то оно отклонит
с ошибкой, отправляемой вам обратно.
Ошибка является объектом ошибки, который будет отправлен вам обратно.
Поэтому, когда их обещание отклоняется, вы имеете дело с
отклонением, используя уловки в вашем коде.
Таким образом, в пределах улова вы предоставите функцию, которая будет иметь дело с ошибкой.
Например, вы можете просто вывести сообщение об ошибке,
журнал консоли и справиться с ошибкой таким образом.
Или у вас может быть более сложный способ обработки ошибки.
Это будет предоставлено в опции catch, которую вы даете для этого кода обещания
на вашей стороне, когда обещание доставляет вам отклонение.
Так вот как обе стороны монеты справляются с обещаниями.
С одной стороны, вам отправляется объект обещания, и
, когда вы получаете объект обещания, с объектом обещания, вы либо делаете
тогда, и поймать, поэтому вы должны реализовать как тогдашние, так и
метрики catch, измененные на этот объект обещания.
И затем, от этого обещания в сторону, если обещание результат правильно,
тогда будет вызвано решение и, таким образом, результат будет доставлен
в тогдашнем методе вашего обещания.
Если обещание отклоняется,
вызов отклонить доставит ошибку в ваш улов.
Так вот как вы будете реализовывать код с помощью обещаний.
Мы рассмотрим пример в упражнении, которое следует за этой лекцией.
Теперь, очевидно, вопрос, который я задаю, почему обещания?
Позже, когда мы имеем дело с Node JS,
мы будем иметь дело с тем, как мы можем построить обратные вызовы.
И я объясню детали обратных вызовов и способ справиться с обратными вызовами
, когда мы охватываем узел JS в последнем курсе этой специализации.
Callbacks имеет проблему создания того, что называется обратным аддом.
Таким образом, у вас есть сильно вложенный код обратного вызова
, который очень сложно понять, что он пытается сделать.
Обещания предоставляют способ решения этой адской проблемы обратного вызова.
Но на данный момент мы концентрируемся на Angular, я просто упомяну этот момент.
И тогда мы вернемся, чтобы разобраться с этим вопросом в последнем курсе.
Другим преимуществом использования обещаний является то, что обещания могут быть изменены.
Обещание, когда он доставляет результат в ячейку,
вы можете сгенерировать другое обещание и возврат, и
, что обещание может быть обработано путем прицепления другого метода затем к этому и так далее.
Таким образом, вы можете связать набор затем методов вместе, чтобы иметь дело с
обещает один за другим.
Если результат сразу доступен или если вы собираетесь отклонить немедленно,
то обещание предоставляет метод немедленного возвращения, не дожидаясь
обещание либо разрешить, либо отклонить.
В этом случае вы просто скажете обещание с капиталом P.resolve и
Promise.reject, а затем вернете либо результат, либо ошибку немедленно.
В первом упражнении мы будем иметь дело с этим методом возврата значения
из нашего сервиса нашим компонентам.
Во второй части упражнения мы рассмотрим
ситуацию, когда обещание решится по прошествии определенного времени.
А также в рамках нашей составляющей мы должны иметь дело с тем, что
результаты возвращаются чуть позже, чем когда вы попросите результат.
С этим быстрым пониманием обещаний
давайте перейдем к следующему упражнению, где мы будем иметь дело с обещаниями.
[МУЗЫКА]