Во-первых: вы не можете использовать $.Promise();
, потому что его не существует.
Отложенный объект — это объект, который может создавать обещание и изменять свое состояние на resolved
или rejected
. Отложенные обычно используются, если вы пишете свою собственную функцию и хотите предоставить обещание вызывающему коду. Вы являетесь производителем ценности.
обещание — это, как следует из названия, обещание будущей ценности. Вы можете прикрепить к нему обратные вызовы, чтобы получить это значение. Обещание было "дано" вам, и вы являетесь получателем будущей стоимости.
Вы не можете изменить состояние обещания. Только код, создавший обещание, может изменить его состояние.
Примеры:
1. (product) Вы используете отложенные объекты, когда хотите обеспечить поддержку промисов для своих собственных функций. Вы вычисляете значение и хотите контролировать, когда обещание будет разрешено.
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. (forward) Если вы вызываете функцию, которая сама возвращает обещание, вам не нужно создавать собственный отложенный объект. Вы можете просто вернуть это обещание. В этом случае функция не создает значение, а пересылает его (вроде):
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) и вычислять (генерировать) другое значение на основе этого.
Связанные вопросы:
person
Felix Kling
schedule
25.06.2013
resolve
d илиreject
ed, изменяя свое состояние, что также будет отражаться в его промисе. Скажите, как вы хотите использовать отложенные платежи для кликов? - person Andrevinsky   schedule 26.06.2013