Po pierwsze: nie możesz użyć, $.Promise();
ponieważ nie istnieje.
Obiekt odroczony to obiekt, który może utworzyć obietnicę i zmienić jej stan na resolved
lub rejected
. Odroczenia są zwykle używane, jeśli piszesz własną funkcję i chcesz zapewnić obietnicę dla kodu wywołującego. Jesteś wytwórcą wartości.
Obietnica jest, jak sama nazwa mówi, to obietnica o wartości przyszłej. Możesz dołączyć do niego wywołania zwrotne, aby uzyskać tę wartość. Obietnica została „dana” tobie i jesteś odbiorcą przyszłej wartości.
Nie możesz zmienić stanu obietnicy. Tylko kod, który utworzył obietnicę, może zmienić jej stan.
Przykłady:
1. ( produkuj ) Używasz odroczonych obiektów, gdy chcesz zapewnić obsługę obietnicy dla własnych funkcji. Obliczasz wartość i chcesz kontrolować, kiedy obietnica zostanie rozwiązana.
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. ( naprzód ) Jeśli wywołujesz funkcję, która sama zwraca obietnicę, nie musisz tworzyć własnego odroczonego obiektu. Możesz po prostu zwrócić tę obietnicę. W tym przypadku funkcja nie tworzy wartości, ale przekazuje ją dalej (rodzaj):
function fetchData() {
return $.ajax({...});
}
fetchData().done(function(response) {
});
3. ( odbierz ) Czasami nie chcesz tworzyć lub przekazywać obietnic / wartości, chcesz je bezpośrednio wykorzystać, tj. Jesteś odbiorcą pewnych informacji:
$('#my_element').fadeOut().promise().done(function() {
});
Oczywiście wszystkie te przypadki użycia można również mieszać. Twoja funkcja może być odbiornikiem wartości (na przykład z wywołania Ajax) i na tej podstawie obliczać (generować) inną wartość.
Powiązane pytania: