Есть ли разница между ними?
return d.resolve("Ok 1").promise(); // works
Возвращает разрешенный Promise объект.На уровне интерфейса обещания определяются как объекты, которые по крайней мере поддерживают метод .then()
.(Вот почему такие объекты также называются thenable .)
В jQuery и по историческим причинам - jQuery реализовал обещания до появления стабильного стандарта - они также поддерживают .done()
, и.fail()
и некоторые другие.
return d.resolve("Ok 2"); // works also
Возвращает разрешенный Отложенный объект.Отсрочки - это расширенный набор обещаний , что означает, что они thenable и поддерживают все те же методы, что и поддержка обещаний jQuery, и могут рассматриваться как объекты обещаний.
Разница между отложенными объектами и объектами Promise заключается в том, что обещания имеют фиксированное состояние, которое нельзя изменить после разрешения, но состояние Deferreds действительно может быть изменено.
d.resolve("Ok 3");
return d.promise();
Этотак же, как в примере # 1.
Итак, что вы должны использовать?
При работе с отложенными jQuery всегда возвращайте .promise()
, поскольку они соответствуют требованию киметь неизменное состояние.