jQuery метод .resolveWith()
Определение и применение
jQuery метод .resolveWith() изменяет состояние объекта Deffered на resolved (успешное выполнение) и вызывает любые, предназначенные для подобных ситуаций функции обратного вызова (doneCallbacks) с заданным контекстом и аргументами.
Обращаю Ваше внимание, что метод .resolveWith() аналогичен методу .resolve(), за тем исключением, что метод .resolveWith() дополнительно позволяет установить контест исполнения функций обратного вызова (doneCallbacks), и в отличии от метода .resolve() принимает значения в виде массива, а не любых значений.
jQuery синтаксис:
Синтаксис 1.5:
deferred.resolveWith()
deferred.resolveWith( context )
deferred.resolveWith( context, args )
context - Object
args - Array
Добавлен в версии jQuery
1.5Значения параметров
| Параметр | Описание |
|---|---|
| context | Контекст (объект this), который передается для функций обратного вызова (doneCallbacks). Необязательный параметр. |
| args | Массив значений, который будет передан для функций обратного вызова (doneCallbacks). Необязательный параметр. |
Пример использования
<html>
<head>
<title>Использование методов .resolveWith() и .rejectWith()</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
<script>
$(document).ready(function () {
let dfd = $.Deferred(); // создаем объект Deferred
let obj = {
// инициализируем объект, содержащий два метода
code1: "its ok",
code2: "something goes wrong",
};
// задаем обработчики, которые будут вызваны при изменении состояния объекта на resolved (успешное выполнение) или rejected (выполнение отклонено)
dfd
.then(function (val) {
// бдует вызван при изменении состояния объекта на resolved
console.log(this[val]); // используя полученное значение выводим в консоль значение одноименного свойства объекта на который ссылается объект this
})
.catch(function (val) {
// бдует вызван при изменении состояния объекта на rejected
console.log(this[val]); // используя полученное значение выводим в консоль значение одноименного свойства объекта на который ссылается объект this
});
$(".resolve").click(function () {
// задаем функцию при нажатиии на элемент с классом .resolve
dfd.resolveWith(obj, ["code1"]); // изменяем состояние объекта Deffered на resolve и передаем контекст и значение
});
$(".reject").click(function () {
// задаем функцию при нажатиии на элемент с классом .reject
dfd.rejectWith(obj, ["code2"]); // изменяем состояние объекта Deffered на reject и передаем контекст и значение
});
});
</script>
</head>
<body>
<button class="resolve">Resolve</button>
<button class="reject">Reject</button>
<button onclick="window.location.reload()">Page reload</button>
</body>
</html>
В этом примере мы инициализируем переменную, которая содержит объект Deffered, созданный с помощью фабричной функции $.Deferred() и переменную, содержащую объект у которого имеются два метода.
При нажатии на определенный элемент <button>, благодаря установленному обработчику событий "click" на элементе мы в первом случае с помощью метода .resolveWith() изменяем состояние объекта Deffered на resolved (успешное выполнение), передаем контекст выполнения для функций обратного вызова (doneCallbacks) и передаем строковое значение внутри массива, а во втором случае с помощью метода .rejectWith() изменяем состояние объекта Deffered на rejected (выполнение отклонено) и передаем другое строковое значение внутри массива.
С помощью вызова метода .then() на объекте Deffered мы устанавливаем фильтр (doneFilter), который определяет функцию, которая вызывается при изменении состояния объекта Deffered на resolved (успешное выполнение). Эта функция, используя полученное значение выводит в консоль значение одноименного свойства объекта на который ссылается объект this.
С помощью вызова метода .catch() на объекте Deffered мы устанавливаем фильтр (failFilter), который определяет функцию, которая вызывается при изменении состояния объекта Deffered на rejected (выполнение отклонено). Эта функция по аналогии с вызовом метода .then(), используя полученное значение выводит в консоль значение одноименного свойства объекта на который ссылается объект this. Метод .catch( fn ) является сокращенным вариантом вызова метода .then( null, fn ).
Обратите внимание, что в этом примере для сохранения контекста мы не используем стрелочные функции.
Результат примера: