Как сразу разрешить или отклонить обещание jQuery? - PullRequest
0 голосов
/ 07 июня 2018

Я не совсем уверен, в чем разница между:

$(document).ready(function() {
  function resolveAtOnce() {
    var d = $.Deferred();

    // return d.resolve("Ok 1").promise(); // works
    return d.resolve("Ok 2"); // works also
    //d.resolve("Ok 3");

    return d.promise();
  }

  resolveAtOnce().done(function(response) {
    console.log("Resolved with response: '" + response + "'");
  }).fail(function(error) {
    console.log("Resolved with response: '" + error + "'");
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

Есть ли разница между всеми тремя подходами?Кажется, все работает.Пример выполнения: https://jsfiddle.net/u819mv7e/.

1 Ответ

0 голосов
/ 08 июня 2018

Есть ли разница между ними?

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(), поскольку они соответствуют требованию киметь неизменное состояние.

...