Как различные реализации Promises/A + меняются?

Какие аспекты библиотеки обещаний покрывают оболочку spec не? Какие вещи различаются между реализациями?

Просьба проиллюстрировать примеры фактических различий (например, между Bluebird и Q).

Ответ 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 раз быстрее, имеет лучшие трассировки стека и автоматическое необработанное обнаружение отторжения. Он также потребляет намного меньше оперативной памяти за обещание.

Вот еще одна ссылка