Во-первых: вы не можете использовать, $.Promise();
потому что его не существует.
Отложенный объект является объектом , который может создать обещание и изменить свое состояние resolved
или rejected
. Отложенные функции обычно используются, если вы пишете свою собственную функцию и хотите предоставить обещание вызывающему коду. Вы производитель ценности.
Обещание , как говорит название, обещание о значении будущего. Вы можете прикрепить к нему обратные вызовы, чтобы получить это значение. Обещание было «дано» вам, и вы являетесь получателем будущей стоимости.
Вы не можете изменить состояние обещания. Только код, создавший обещание, может изменить его состояние.
Примеры:
1. ( произвести ) Вы используете отложенные объекты, когда хотите обеспечить поддержку обещаний для ваших собственных функций. Вы вычисляете значение и хотите контролировать выполнение обещания.
function callMe() {
var d = new $.Deferred();
setTimeout(function() {
d.resolve('some_value_compute_asynchronously');
}, 1000);
return d.promise();
}
callMe().done(function(value) {
alert(value);
});
2. ( вперед ) Если вы вызываете функцию, которая сама возвращает обещание, вам не нужно создавать свой собственный отложенный объект. Вы можете просто вернуть это обещание. В этом случае функция не создает значение, а пересылает его (своего рода):
function fetchData() {
return $.ajax({...});
}
fetchData().done(function(response) {
});
3. ( получение ) Иногда вы не хотите создавать или передавать обещания / значения, вы хотите использовать их напрямую, т.е. вы являетесь получателем некоторой информации:
$('#my_element').fadeOut().promise().done(function() {
});
Конечно, все эти варианты использования также можно смешивать. Ваша функция может быть получателем значения (например, из вызова Ajax) и вычислять (производить) другое значение на основе этого.
Связанные вопросы: