jQuery раньше имел ТОЛЬКО функции обратного вызова для success
и error
и complete
.
Затем они решили поддерживать промисы с помощью объекта jqXHR, и именно тогда они добавили .done()
, .fail()
, .always()
и т. д. в духе промисов API. Эти новые методы служат той же цели, что и обратные вызовы, но в другой форме. Вы можете использовать любой стиль API, который лучше подходит для вашего стиля кодирования.
По мере того, как люди все больше и больше знакомятся с промисами и все больше и больше асинхронных операций используют эту концепцию, я подозреваю, что со временем все больше и больше людей перейдут на промис API, но пока что jQuery поддерживает и то, и другое.
Метод .success()
устарел в пользу общих имен методов объектов обещаний.
Из документа по jQuery вы можете увидеть, как различные методы promise связаны с типами обратного вызова:
jqXHR.done(function( data, textStatus, jqXHR ) {}); Альтернативная конструкция опции обратного вызова, метод .done() заменяет устаревший метод jqXHR.success(). Обратитесь к deferred.done() для деталей реализации.
jqXHR.fail(function( jqXHR, textStatus, errorThrown ) {}); Альтернативная конструкция для опции обратного вызова ошибки, метод .fail() заменяет устаревший метод .error(). Обратитесь к deferred.fail() для деталей реализации.
jqXHR.always(function( data|jqXHR, textStatus, jqXHR|errorThrown ) { }); Альтернативная конструкция опции полного обратного вызова, метод .always() заменяет устаревший метод .complete() .
В ответ на успешный запрос аргументы функции те же, что и у .done(): данные, textStatus и объект jqXHR. Для неудачных запросов аргументы такие же, как у .fail(): объект jqXHR, textStatus и errorThrown. Обратитесь к deferred.always() для деталей реализации.
jqXHR.then(function( data, textStatus, jqXHR ) {}, function( jqXHR, textStatus, errorThrown ) {}); Включает функциональные возможности методов .done() и .fail(), позволяя (начиная с jQuery 1.8) управлять базовым обещанием. Обратитесь к deferred.then() для деталей реализации.
Если вы хотите кодировать так, чтобы он больше соответствовал стандарту ES6 Promises, то из этих четырех вариантов вы должны использовать только .then()
.
person
jfriend00
schedule
06.03.2014