Поиск…


Вступление

Обещания jQuery - это умный способ объединения асинхронных операций в блок-блоке. Это заменяет вставку старых вызовов обратных вызовов, которые не так легко реорганизовываются.

Создание основных обещаний

Вот очень простой пример функции, которая « обещает действовать, когда истекает заданное время». Он делает это, создавая новый объект « Deferred , который разрешается позже и возвращает обещание Отсрочка:

function waitPromise(milliseconds){

   // Create a new Deferred object using the jQuery static method
   var def = $.Deferred();

   // Do some asynchronous work - in this case a simple timer 
   setTimeout(function(){

       // Work completed... resolve the deferred, so it's promise will proceed
       def.resolve();
   }, milliseconds);

   // Immediately return a "promise to proceed when the wait time ends"
   return def.promise();
}

И используйте вот так:

waitPromise(2000).then(function(){
     console.log("I have waited long enough");
});

Асинхронные обещания

Если у вас есть несколько асинхронных задач, которые должны возникать один за другим, вам нужно объединить свои объекты обещаний. Вот простой пример:

function First() {
    console.log("Calling Function First");
    return $.get("/ajax/GetFunction/First");
}

function Second() {
    console.log("Calling Function Second");
    return $.get("/ajax/GetFunction/Second");
}
 
function Third() {
    console.log("Calling Function Third");
    return $.get("/ajax/GetFunction/Third");
}

function log(results){
    console.log("Result from previous AJAX call: " + results.data);
}
 
First().done(log)
       .then(Second).done(log)
       .then(Third).done(log);

jQuery ajax () успех, ошибка VS .done (), .fail ()

успех и ошибка: обратный вызов успеха, который вызывается при успешном завершении запроса Ajax.

Обратный вызов сбоя, который вызывается при возникновении ошибки при выполнении запроса.

Пример:

 $.ajax({
        url: 'URL',
        type: 'POST',
        data: yourData,
        datatype: 'json',
        success: function (data) { successFunction(data); },
        error: function (jqXHR, textStatus, errorThrown) { errorFunction(); }
    });

.done () и .fail ():

.ajax (). done (function (data, textStatus, jqXHR) {}); Заменяет метод .success (), который устарел в jQuery 1.8.Это альтернативная конструкция для функции обратного вызова успеха выше.

.ajax (). fail (function (jqXHR, textStatus, errorThrown) {}); Заменяет метод .error (), который устарел в jQuery 1.8.Это альтернативная конструкция для полной функции обратного вызова выше.

Пример:

$.ajax({
    url: 'URL',
    type: 'POST',
    data: yourData,
    datatype: 'json'
})
.done(function (data) { successFunction(data); })
.fail(function (jqXHR, textStatus, errorThrown) { serrorFunction(); });

Получите текущее состояние обещания

По умолчанию состояние обещания ожидает, когда оно будет создано. Состояние обещания изменяется, когда отложенный объект, создавший обещание, решает / отклоняет его.

var deferred = new $.Deferred();
var d1= deferred.promise({
    prop: "value"
});
var d2= $("div").promise();
var d3= $("div").hide(1000).promise();

console.log(d1.state()); // "pending"
console.log(d2.state()); // "resolved"
console.log(d3.state()); // "pending"


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow