Ответ 1
Первое: вы не можете использовать $.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() {
// do some configuration here and pass to '$.ajax'
return $.ajax({...});
}
fetchData().done(function(response) {
// ...
});
3. (получение) Иногда вы не хотите создавать или передавать обещания/ценности, вы хотите использовать их напрямую, то есть вы получаете некоторую информацию:
$('#my_element').fadeOut().promise().done(function() {
// called when animation is finished
});
Конечно, все эти варианты использования могут быть смешаны. Ваша функция может быть получателем значения (например, из вызова Ajax) и вычислять (производить) другое значение на основе этого.
Смежные вопросы: