Новый стандарт добавляет нативное обещание.
Здесь мы обсудим только использование цепей и подумаем о деталях.
1. Обзор then () и catch ()
Функция обратного вызова может быть помещена в параметры Then () и Catch (), чтобы получить конечный результат обещания.
Затем () может получить параметр, тогда этот обратный вызов будет вызван только тогда, когда обещание Resiple ().
Затем () также может получить второй параметр, а второй обратный вызов используется для обработки ситуации Grape Dize ().
Catch () Специально обрабатывает ситуацию Grape Dize ().
Другими словами, тогда () может использоваться в обоих способах, а Catch () может обрабатывать только DISECT (). Тем не менее, рекомендуется использовать then () для обработки Resolve () и catch () для обработки Dize ().
2. Однако то, о чем я хочу поговорить, не выше. Выше приведено просто обзор основного использования. Здесь мы начнем с деталей возвращаемых значений и использования цепей then () и метода Then ().
Затем в официальной документации говорится, что оба тогда () и Catch () возвращают обещание, которое очень интригует. (Я новичок в JS, и я никогда не подвергался предыдущим обещаниям в дикой природе).
Прежде всего, это недавно возвращенное обещание не является первоначальным обещанием;
Во -вторых, изменение состояния вновь возвращаемого обещания (Resolve () или DRIECT ().) Связано с состоянием предыдущего обещания и тем, как тогда () используется.
Сначала объясните ситуацию Then (): (вылов аналогичен)
var p1 = rape.resolve ("успех"); var p2 = p1.then (task1); var p3 = p2.then (task2);Примечание. Приведенные выше Task1 и Task2 являются обратными вызовами.
Здесь P1 - это созданное обещание и напрямую Resolve ();
P2 - это обещание, полученное с помощью then (), а P3 также является обещанием, полученным с помощью тогда ().
Так как же изменится состояние P2, а как насчет P3?
Я собираюсь использовать следующую фигуру, чтобы объяснить эту концепцию:
в,
1. Восьмиугольник представляет объект обещания.
2. Круг представляет состояние внутри обещания, а черная стрелка представляет изменение состояния.
3. Стрелка правого представляет собой вызов тогдашней функции.
4. То есть, пока тогда называется функция, будет создан новый объект обещания.
5. При вызове функции тогда не знают, каково статус предыдущего объекта обещания, независимо от того, находится ли она на рассмотрении или урегулировано? Это нельзя предположить и нельзя увидеть снаружи.
6. Вызов тогдашней функции не будет блокировать, то есть P2 и P3 генерируются почти мгновенно, даже если P1 все еще медленно мигрирует свое собственное состояние.
Мы знаем, что состояние P1 разрешено (см. Код выше). Тем не менее, здесь не было объяснено, как изменяются состояния P2 и P3, это разрешено или отвергается? Посмотрите на новую картинку ниже.
Вы можете увидеть больше бриллиантов.
Алмаз представляет функцию обратного вызова, проходящую, когда тогда называется. Вверх ромб представляет собой процесс передачи в [разрешенном для предыдущего объекта обещания], а вниз ромб представляет собой процесс передачи в [отклоненном для предыдущего объекта обещания].
ПРИМЕЧАНИЕ. В этом примере обработка для отклонения не передается, то есть в нисходящем бриллианте не следует нарисовать на рисунке выше. Для удобства нам нужно только знать, что алмаз вверх и вниз связан с тем, как мы используем тогда или поймали. Давайте снова посмотрим на пример кода:
var p1 = rape.resolve ("успех"); var p2 = p1.then (task1); // вверх ромб генерируется var p3 = p2.then (task2); // вверх ромб генерируетсяМожно видеть, что мы не даем второй параметр тогда, то есть мы не обрабатываем отклонение.
Чтобы добавить, если вы хотите иметь дело с отклонениями, вы можете использовать тогда или поймать. Пойл специально используется для работы с отклонениями. Кроме того, между тогда нет разницы.
1. Если окончательное состояние P1 (разрешения или отклонения) правильно обработано (при вызове затем, соответствующий обратный вызов передается, то есть существует соответствующий бриллиант), тогда состояние P2 будет изменено для разрешения.
2. Если конечное состояние P1 (разрешения или отклонения) не обрабатывается правильно (при вызове тогда, соответствующий обратный вызов отсутствует, то есть нет соответствующего алмаза), тогда состояние P1 будет направлено на P2 (состояние получения P1).
3. Пройдите так.
4. В этой статье не объясняется, как получить последнее обещание окончательные данные в обратном обратном направлении, то есть как передавать данные, есть много учебных пособий.
3. Вот несколько примеров, чтобы суммировать эту статью.
На рисунке дано состояние P1, а решимость или отклонение дается самим собой. Цель состоит в том, чтобы запустить окончательное состояние P2 и P3.
Вышеуказанное четыре независимых примера, без связи между ними.
X означает, что P3 не использует функцию Then или Catch, поэтому нет способа справиться с разрешением или отклонить.
Наконец, если есть ошибка, пожалуйста, поправьте меня вовремя, спасибо! ~! ! @~~~
Приведенная выше статья глубоко понимает цепочку обещаний JS-это весь контент, которым я поделился с вами. Я надеюсь, что это может дать вам ссылку, и я надеюсь, что вы сможете поддержать Wulin.com больше.