#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
?