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

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

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


person callum    schedule 01.05.2014    source источник


Ответы (1)


Почти все. Спецификация Promises/A+ предназначена для взаимодействия с промисами, она построена таким образом, что библиотеки промисов (а теперь и нативные промисы) могут общаться друг с другом. Идея состоит в том, чтобы можно было предсказать, как ведет себя промис, и определить, как промисы ассимилируются другими библиотеками.

Цитирую спецификацию:

Эта спецификация детализирует поведение метода then, предоставляя интероперабельную основу, на которую можно положиться во всех реализациях обещаний, совместимых с Promises/A+. Таким образом, спецификацию следует считать очень стабильной. Хотя организация Promises/A+ может время от времени пересматривать эту спецификацию с небольшими изменениями, обеспечивающими обратную совместимость, для решения недавно обнаруженных крайних случаев, мы будем интегрировать большие или обратно несовместимые спецификации только после тщательного рассмотрения, обсуждения и тестирования. Наконец, базовая спецификация Promises/A+ не касается того, как создавать, выполнять или отклонять обещания, а вместо этого фокусируется на обеспечении интероперабельного метода. Будущая работа в сопутствующих спецификациях может затронуть эти вопросы.

Не распространяется следующее:

Например, Bluebird и Q полностью относятся к категории Promises/A+, но во многих из них различаются:

  • Следующий Q, v2 вводит оценку, где Bluebird намерен в конечном итоге отказаться от прогрессии в пользу чего-то вроде IProgress C #.
  • Создание промиса обычно выполняется с отложенными в Q (хотя теперь он предлагает вариант конструктора промисов), Bluebird поощряет конструктор промисов.
  • Bluebird обладает более надежными и сильными возможностями обещаний, превращая весь API обратного вызова в обещания в одной команде. Автор Q Крис создал Q-IO, который вручную обещает файловую систему и модули http.
  • Bluebird позволяет привязывать значение this к области видимости через .bind и методы массива обещаний (.map, .reduce, .filter и т. д.).
  • В Q есть такие примитивы, как асинхронные очереди и RPC через Q-соединение,
  • Bluebird примерно в 100 раз быстрее, имеет лучшую трассировку стека и автоматическое обнаружение необработанного отклонения. Он также потребляет намного меньше оперативной памяти на промис.

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

person Benjamin Gruenbaum    schedule 01.05.2014