Моя работа была немного проще в последнее время. Я вспомнил одно обещание слова, которое я всегда видел раньше, поэтому я терпеливо изучал его.
1: Что такое обещание? Почему эта вещь там?
Прежде всего, обещание создается для решения проблемы написания кода во время асинхронного программирования JavaScript.
С разработкой JavaScript есть все больше и больше асинхронных сценариев. Передняя часть имеет Ajax, Settimeout и т. Д., А узел бэкэнд асинхронно. Согласно традиционной практике, она заключается в том, чтобы внедрить обратные вызовы в различные обратные вызовы. Код может заставить людей головокружение.
В настоящее время сообщество CommonJS предложило спецификацию, называемую Orders/A+, которая определяет, как писать асинхронный код, включая использование When/Then/Resolve и т. Д. для организации асинхронного кода.
Поскольку эта спецификация очень элегантна, многие люди внедрили эту спецификацию один за другой, в том числе в браузере Native Support Special (), отложены в jQuery, When.js и т. Д.
Поскольку эти библиотеки соответствуют этой спецификации, просто изучите одну. В основном я узнал отложенность от jQuery, поэтому в этой статье в основном рассказывается об этой реализации.
Два: отложено jQuery
Прежде всего, о отложенном объекте, г -н Руан Ифенг подробно написал статью, пожалуйста, нажмите здесь. Рекомендуется сначала прочитать его статью, а затем продолжить чтение.
Как упоминалось выше, обещания предназначены для решения асинхронного (например, AJAX), поэтому давайте сравним их различия.
Классический jquery ajax написан как
Кода -копия выглядит следующим образом:
$ .ajax ({
Тип: "Get",
URL: "",
Успех: function () {},
ошибка; function () {}
});
Параметры успеха и ошибки являются функциями обратного вызова при успехе/сбое.
Теперь метод написания jQuery Ajax стал
Кода -копия выглядит следующим образом:
$ .ajax ({
тип; "получать",
URL: ""
}). DED (function () {}). Fail (function () {});
После успеха будет вызвана функция в выполнении, и если функция в сборе вызвана, функция в сборе будет вызвана.
Увидев это, у вас могут возникнуть вопросы, какой объект выполняются эти методы/провалится? Какой объект возвращает $ .ajax () и почему эти два метода?
Ответ находится в отложенном объекте, представленном ниже.
jQuery предоставляет новый тип отложенного. Генерировать с $ .deferred (). Например
Кода -копия выглядит следующим образом:
var def = $ .deferred ();
Это определяет множество методов, включая выполненную/провал/разрешить/отклонить и т. Д.
Итак, здесь мы знаем, что вышеприведенный $ .ajax () фактически возвращает этот объект.
Есть много методов для отложенных объектов. Вот несколько часто используемых. Для получения дополнительной информации, пожалуйста, обратитесь к API.
Первое, что естественным образом генерировать объект DEF. Здесь есть много способов, таких как:
Кода -копия выглядит следующим образом:
var def = $ .deferred (); // генерируйте это самостоятельно
$ .ajax ({}); // Метод AJAX возвращает также объект DEF
$ .hen (); // Когда метод также вернет объект DEF
Здесь $. Когда () можно говорить отдельно. Этот метод обычно получает один или несколько отложенных объектов, а затем определяет состояние объекта, возвращаемого $ .hen () на основе состояния этих отложенных объектов. Одним из сценариев использования является множество запросов AJAX. Если один из них терпит неудачу, это считается неудачей. Затем вы можете передать несколько методов AJAX в $. When (), например $. Затем $. Когда вернет объект DEF (оценивается на основе результатов этих двух запросов).
Затем вы получаете объект DEF, и есть ряд методов, чтобы изменить состояние этого объекта.
Кода -копия выглядит следующим образом:
def.resolve (); // Установите объект DEF для завершения, а затем функция, связанная с DEF.Done (), будет выполнена немедленно.
def.reject (); // Установите объект DEF, чтобы не удалось, а затем функция, связанная с DEF.FAIL (), будет выполнена немедленно.
def.notify (); // Во время выполнения объекта DEF соответствующий обратный вызов - def.Progress ().
Далее следует метод установки обратного вызова, заказ соответствует вышеуказанному, то есть какое состояние позвонит на какой обратный вызов
Кода -копия выглядит следующим образом:
def.done (); // Соответствует DEF.RESOLVE ();
def.fail (); // соответствует def.reject ();
def.progress (); // Соответствует def.notify ();
// Особенный
def.lways (); // Вызывается, если успешно или не удалось
def.Then (); // Принять несколько функций, по порядку, успеху, неудаче и прогрессу
На самом деле, на данный момент использование отложенного объекта почти одинаково. Тем не менее, jQuery также предоставляет несколько API
Кода -копия выглядит следующим образом:
// Проверьте текущий класс состояния
DEF.Isrejected ();
DEF.IsResolved ();
def.state ();
Как следует из названия, эти API не будут обсуждаться подробно. Для получения подробной информации вы можете проверить документацию JQUERY API, приведенную выше.
Есть еще один метод, который иногда заключается в том, что мы хотим дать внешний объект DEF, и тогда этот объект может установить обратные вызовы для различных состояний, но не может изменить его состояние, чтобы мы могли его использовать.
Кода -копия выглядит следующим образом:
def.promise ();
Верните объект Spearice, который является подмножеством отложенного объекта. Вы можете использовать Done/Fail и другие методы, без разрешения/отклонения и других методов. В основном он защищает состояние DEF -объекта от измененного извне.
На данный момент все обещания обсуждались. Теперь вы можете использовать их в своих проектах. Кроме того, я желаю вам счастливых ранних лет заранее. Желаю всем счастливого года овец ^^.