jQuery метод .rejectWith()

jQuery объект Deferred

Определение и применение

jQuery метод .rejectWith() изменяет состояние объекта Deffered на rejected (выполнение отклонено) и вызывает любые, предназначенные для подобных ситуаций функции обратного вызова (failCallbacks) с заданным контекстом и аргументами.


Под функциями обратного вызова (failCallbacks) стоит понимать методы .fail() и .then(). Обратите внимание, что обратные вызовы выполняются в порядке их добавления. Каждому обратному вызову могут передоваться дополнительные аргументы от метода .reject(). Все failCallbacks, добавленные после того как объект Deffered переходит в состояние rejected, выполняются немедленно при добавлении, используя переданные аргументы (при наличии) и контекст выполнения.


Обращаю Ваше внимание, что метод .rejectWith() аналогичен методу .reject(), за тем исключением, что метод .rejectWith() дополнительно позволяет установить контест исполнения функций обратного вызова (failCallbacks), и в отличии от метода .reject() принимает значения в виде массива, а не любых значений.

jQuery синтаксис:

Синтаксис 1.5:

deferred.rejectWith()
deferred.rejectWith( context )
deferred.rejectWith( context, args )

context - Object
args - Array

Добавлен в версии jQuery

1.5

Значения параметров

ПараметрОписание
contextКонтекст (объект this), который передается для функций обратного вызова (failCallbacks). Необязательный параметр.
argsМассив значений, который будет передан для функций обратного вызова (failCallbacks). Необязательный параметр.

Пример использования

<!DOCTYPE html>
<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 ).

Обратите внимание, что в этом примере для сохранения контекста мы не используем стрелочные функции.

Результат примера:

Пример использования jQuery методов .resolveWith() и .rejectWith().
Пример использования jQuery методов .resolveWith() и .rejectWith().
jQuery объект Deferred