@Domenic содержит очень подробную статью о недостатках отложенных объектов jQuery: Вам не хватает точки Promises. В нем Доменик выделяет несколько недостатков jQuery promises по сравнению с другими, включая Q, когда .js, RSVP.js и ES6 promises.
Я ухожу от статьи Доменика, чувствуя, что jQuery promises имеет свойственный отказ, концептуально. Я пытаюсь привести примеры к концепции.
Я понимаю, что в реализации jQuery есть две проблемы:
1. Метод .then
не связан с цепью
Другими словами
promise.then(a).then(b)
jQuery вызовет a
, затем b
, когда выполняется promise
.
Так как .then
возвращает новое обещание в других библиотеках обещаний, их эквивалент будет:
promise.then(a)
promise.then(b)
2. Обработка исключений в jQuery разворачивается.
Другой проблемой будет обработка исключений, а именно:
try {
promise.then(a)
} catch (e) {
}
Эквивалент в Q будет:
try {
promise.then(a).done()
} catch (e) {
// .done() re-throws any exceptions from a
}
В jQuery генерируются исключения и пузырьки, когда a
не удается блокировать catch. В другом promises любое исключение в a
переносится на .done
или .catch
или другой асинхронный catch. Если ни один из вызовов API обещаний не поймает исключение, оно исчезает (следовательно, наилучшая практика Q, например, используя .done
для освобождения любых необработанных исключений).
Устранены ли проблемы, связанные с реализацией jQuery promises, или я неправильно понял или пропустил проблемы?
Изменить. Этот вопрос относится к jQuery < 3,0; с jQuery 3.0 alpha jQuery - это Promises/A +.