jQuery метод .resolve()
Определение и применение
jQuery метод .resolve() изменяет состояние объекта Deferred на resolved (успешное
выполнение) и вызывает любые, предназначенные для подобных ситуаций функции обратного вызова (doneCallbacks) с
заданными аргументами.
jQuery синтаксис:
Синтаксис 1.5:
deferred.resolve()
deferred.resolve( args )args - Anything
Добавлен в версии jQuery
1.5Значения параметров
| Параметр | Описание |
|---|---|
| args | Необязательные аргументы (параметры), которые будут переданы для функций обратного вызова (doneCallbacks). |
Пример использования
В этом примере мы с Вами рассмотрим как с помощью метода .resolve() перевести объект Deferred в
состояние успешное выполнение:
Пример использования jQuery метода .resolve() и .done()
Нажмите ▶, затем выполните действие из пояснения. Измените JavaScript и запустите пример ещё раз. В редакторе используется jQuery 3.1.1.
index.html
<button class="start">Клик</button>
<p></p>
main.js
$(document).ready(function () {
function f1() {
$('p').append(' 1 ')
}
function f2() {
$('p').append(' 2 ')
}
function f3() {
$('p').append(' 3 ')
}
function timeout() {
$('p').append('timeout')
setTimeout(function () {
$('p').append(' folks!!!')
}, 2000)
}
var dfd = $.Deferred()
dfd.done([f1, f2, f3], timeout, [f3, f2, f1]).done(function () {
$('p').append("<br>That's all")
console.log(arguments)
})
$('.start').click(function () {
// задаем функцию при нажатиии на элемент с классом .start
dfd.resolve('a', 'b', 'c')
})
})
Нажмите ▶, чтобы запустить пример.
В этом примере мы создали четыре функции, которые с помощью метода
.append()
вставляют текстовое содержимое, указанное в параметре метода в конец каждого выбранного элемента
<p>. Обратите внимание, что функция с именем timeout имеет внутри себя функцию, которая выполняется через
определенное время.
Далее мы инициализируем переменную, которая содержит объект Deferred, созданный с помощью фабричной
функции $.Deferred() и с помощью методов
.done()
задаем обработчики, которые будут вызваны при изменении состояния объекта Deferred на
resolved (успешное выполнение).
Обратите внимание на важный момент, функции обратного вызова, указанные в методе .done() будут вызваны и выполнены в порядке их добавления, но при этом следующая вызываемая функция не дожидается выполнения предыдущей. По этой причине функция, которая вызывается внутри функции с именем timeout (установленная с помощью метода setTimeout через 2000 миллисекунд) отработает последней.
Для того, чтобы перевести состояние объекта Deferred на resolved (успешное выполнение) нам
необходимо использовать метод .resolve(), который вызывается на объекте Deferred при нажатии на
элемент
<button>, благодаря установленному обработчику событий "click" на элементе. Кроме того, мы передаем в метод
.resolve() произвольные аргументы, которые мы выводим в консоль при заключительном вызове метода
.resolve().