По-перше: Ви не можете використовувати, $.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) і обчислювати (виробляти) інше значення на основі цього.
Пов’язані запитання: