Ответ 1
Почти все. Спецификация Promises/A + предназначена для обеспечения совместимости с обещаниями, она построена так, что обеими библиотеками (а теперь и родными promises) могут разговаривать друг с другом. Идея заключается в том, чтобы можно было предсказать, как выглядит обещание, и определить, как promises ассимилируются другими библиотеками.
Указание спецификации:
В этой спецификации подробно описывается поведение метода
then
, обеспечивающее совместимую базу, для которой можно обеспечить выполнение всех реализаций, совместимых с Promises/A+. Таким образом, спецификация должна считаться очень стабильной. Хотя организация Promises/A + может иногда пересматривать эту спецификацию с небольшими изменениями, совместимыми с обратной записью, для обращения к вновь открывшимся угловым случаям, мы будем интегрировать большие или отсталые несовместимые только после тщательного рассмотрения, обсуждения и тестирования. Наконец, спецификация ядра Promises/A + не занимается тем, как создавать, выполнять или отклонять promises, выбирая вместо этого сосредоточиться на предоставлении интероперабельного, а затем метода. Будущая работа в сопутствующих спецификациях может касаться этих предметов.
Не распространяются следующие действия:
- Создание обещания (это конструктор обещаний).
- Агрессия обещаний (хотя большинство реализаций поддерживают
.all
). - Progression (что спецификация прогресса, которая вскоре будет заменена imo).
- Отмена (отмена).
- Контроль необработанного отказа (нет спецификации, но есть обсуждение проверки).
- Трассировки стека.
Bluebird и Q, например, являются полностью жалобами Promises/A +, но различаются по многим из них:
- Следующий Q, v2 вводит оценку, где Bluebird намерена отказаться от прогрессирования в конечном итоге в пользу чего-то вроде С# IProgress.
- Создание обещания обычно выполняется с отсрочками в Q (хотя теперь он предлагает вариант конструктора обещаний), Bluebird поощряет конструктор обещаний.
- Bluebird обладает более надежными и более сильными способностями к размножению, превращая весь API обратного вызова в promises в одну команду. Q автор Крис построил Q-IO, который вручную обещает файловую систему и http-модули.
- Bluebird позволяет привязывать привязку
this
кthis
с помощью.bind
и применять методы массива (.map
,.reduce
,.filter
и т.д.). - Q имеет примитивы, такие как асинхронные очереди, и RPC через Q-соединение в виду,
- Bluebird примерно в 100 раз быстрее, имеет лучшие трассировки стека и автоматическое необработанное обнаружение отторжения. Он также потребляет намного меньше оперативной памяти за обещание.