Статус отменяемых обещаний

Самая старая проблема на https://github.com/promises-aplus/cancellation-spec (на момент письма) 9 месяцев. Я действительно не могу найти надежный источник информации о функциях отмены на «стандартных» обещаниях.

На данный момент похоже, что эта функция реализована в bluebird, но как разработчик библиотеки я не хочу загромождать свой пакет полным обещание реализации.

Что я хотел бы сделать, так это просто передать обещание и поддержать спецификацию отмены.

Где я мог найти эту информацию?


person Pier Paolo Ramon    schedule 14.02.2014    source источник


Ответы (1)


Отменяемых обещаний не будет в ES6, поскольку обещания ES6 очень минимальны.

Работа над отменой в пространстве Promises/A+ застопорилась, поскольку мы ждем, пока эволюция библиотеки докажет, что один из подходов явно лучше. Последнее соображение связано с этой проблемой, которую ищет большинство библиотек. реализовать отмену, похоже, следует (более или менее). Ключевые моменты:

  • Отмена как частный случай отказов
  • Реакции на отмену распространяются вверх по цепочке, как и само неприятие — вниз.

Непонятно, что вы подразумеваете под «просто передать обещание и поддержать спецификацию отмены». Вы пытаетесь создать thenables, предполагая, что потребители вашей библиотеки будут использовать его, но каким-то образом впоследствии унаследовать поведение отмены? Это было бы немного сложно, тем более что отмена обычно зависит от указанного конструктора Cancellation, используемого для отклонения обещания. Если бы экосистема отмены была более развитой, способ сделать это, вероятно, был бы более простым.

Что касается будущего, то оно в движении! Одним из путей вперед может быть кто-то, кто будет отстаивать эволюцию этого предложения об отмене в пространстве Promises/A+, получая поддержку от крупных библиотек, таких как Q, RSVP, when и Bluebird. Тогда многие небольшие библиотеки, вероятно, купятся, и у вас будет что-то, на что вы, вероятно, сможете положиться. Если он окажется таким популярным, его, вероятно, также рассмотрят для промисов ECMAScript!

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

person Domenic    schedule 14.02.2014
comment
Доменик, ваша работа над спецификацией обещаний потрясающая, спасибо за разъяснения. И да, я имел в виду именно это, возможность создавать cancellable thenable была бы потрясающей. Как кто-то может быть более вовлеченным в то, чтобы сделать это реальным? Есть много шероховатостей, таких как отмена Promise.all результатов и подобных агрегатов, например. - person Pier Paolo Ramon; 14.02.2014
comment
@PierPaoloRamon Вы можете рассчитывать на то, что Bluebird продолжит поддерживать Cancellable в обозримом будущем, но на данный момент это «согласие», а не «отказ». То есть вы должны вызвать метод обещания, чтобы сделать его отменяемым. Так как в качестве API он не имеет «затрат» на производительность для библиотеки, в худшем случае он станет плагином, поэтому вы можете продолжать его использовать. Тем не менее, я, вероятно, не стал бы писать фронтальный (библиотечный) код, который рассчитывает на то, что пользователи знают/знакомы с этим поведением, поскольку на данный момент оно не реализовано ни в большинстве других библиотек, ни в собственном JS. - person Benjamin Gruenbaum; 14.02.2014
comment
Я не уверен, что это одно и то же, возможно, это просто связано, но предложение TC39 об отменяемых обещаниях было отозвано. - person user247702; 20.12.2016
comment
@Stijn, это та же проблема. Он удален отозван, но совсем недавно (в последние часы) по этой теме произошли какие-то изменения. - person Pier Paolo Ramon; 20.12.2016
comment
@PierPaoloRamon Я только что заметил, что ответчик и сторонник предложения - один и тот же человек, упс :) - person user247702; 20.12.2016