@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 +.