Проблема понимания — Отложенная цепочка Jquery

#jquery #promise #deferred

#jquery #обещание #отложенный

Вопрос:

 function ajax_call() {

    var ajaxCallMock = $.Deferred().resolve('A');

    return ajaxCallMock.done(function(response) {

            return 'B';

    });
}



ajax_call().done(function(response) {
    console.log(response);
});
  

Я бы ожидал, что вывод на консоль будет «B», но я получаю «A». Почему?

Комментарии:

1. Потому что вы можете разрешить обещание только один раз AFAIK

2. Я думаю, что разрешенное обещание всегда возвращает другое решенное обещание, это неправильно?

3. О, я пропустил done часть, извините

4. jQuery .done() не является синонимом .then() . Существует мало случаев, когда вы могли бы использовать .done() .

Ответ №1:

Использование then() вместо done() as done не возвращает новое обещание.

 function ajax_call() {

  var ajaxCallMock = $.Deferred().resolve('A');

  return ajaxCallMock.then(function(response) {
    return 'B';
  });
}



ajax_call().then(function(response) {
  console.log(response);
});  
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>  

Комментарии:

1. Могу ли я просто var ajaxCallMock = $.Deferred().resolve('A'); заменить $.get() вызов Ajax? и все еще используете then ?