Подтвердить что ты не робот

Легкая реализация promises

Я создаю простой инструмент построения диаграмм. Когда пользователь выбирает источник данных и тип диаграммы, загружаются как данные, так и script для конкретной диаграммы (.js), а затем код отображает диаграмму.

В настоящее время я использую следующую последовательность:

  • Загрузить диаграмму script
  • Загрузка данных
  • Отобразить диаграмму

Чтобы повысить производительность, я хотел бы реализовать promises и загрузить script и данные параллельно. Библиотека, подобная jQuery, слишком велика для моих нужд (вопрос не в том, чтобы спорить об этом), есть ли более легкие решения? Может быть, библиотека размером 1-2 kb или учебник? Опять же, это очень простая реализация с двумя действиями параллельно.

[Обновление] Я поддержал все ответы, поскольку все они выглядят превосходно. Я отправлю отчет после того, как проведу еще несколько тестов.

4b9b3361

Ответ 1

Я построил что-то вроде этого некоторое время назад, которое я назвал "когда-то". Я хотел что-то сказать: "Загрузите все эти вещи, а затем сделайте что-нибудь, когда они закончатся".

https://github.com/geuis/when-then

Я был вдохновлен идеей promises, но хотел просто упростить простые задачи.

Ответ 2

Я настоятельно рекомендую использовать реализацию Promises/A спецификации, которая становится стандартным способом выполнения promises в JavaScript. promises работают лучше, когда каждый использует один и тот же вкус, поэтому всем интересно использовать совместимые реализации.

Q, вероятно, самая популярная и полнофункциональная реализация (она также будет адаптировать jQuery и другие несовместимые promises), а when и rsvp должны быть более "легкими".

Ответ 3

Хотел бросить свои 2 ¢, поскольку здесь было развитие. Promises появились изначально в JavaScript и будут реализованы для FF 30 и Chrome 33 (в соответствии с эта таблица).

Хотя это вряд ли стоит упоминать в месте, которое обычно заливается "но поддерживает ли IE6?", там 2kb minified и gzipped polyfill здесь, который является "главным образом переопределением API rsvp.js.

Поскольку jQuery promises на самом деле не promises, и я согласен с этот парень, который обещает синтаксис в разных библиотеках, я считаю, что родной promises уже стоит реализовать, даже если браузеры ваших пользователей, вероятно, пока не поддерживают их.


Изменить: после использования promises в контексте Angular и Firefox addon-SDK, оба из которых очень похожи на Q, я предпочитаю этот синтаксис и прочитал, что он все же быстрее, чем встроенная реализация.

Ответ 4

Отметьте Deferred, он имеет модульную сборку, и вы можете решить только взять ядро ​​и не должно превышать 1 КБ.

Инструкции по установке браузера объясняет, как создать такой пакет в несколько простых шагов

Ответ 5

Если вы хотите, чтобы он был очень легким, вы должны попробовать sb-prom, он под лицензией MIT. Это всего лишь несколько килобайт и API совместим с native Promises.

function myFunction(){
   return new Promise(function(resolve,reject){
     resolve({some:"data"});
   }
}
myFunction().then(function(result){
   console.log(result); // {some:"data"}
});

Ответ 6

Попробуйте async.

Он имеет методы для выполнения операций параллельно и последовательно. Первоначально он был разработан для работы в node, но теперь работает и в браузере.

РЕДАКТИРОВАТЬ ДОБАВИТЬ: У них нет сокращенной версии, поэтому полная энчилада составляет ~ 42kb.

Ответ 7

Я создал очень легкую библиотеку обещаний. Это не совместимо, но я не хотел, чтобы что-то длиной 2000 строк.

Это вилка обещаний, но я сделал несколько приятных дополнений.

Вот ссылка на репо. https://github.com/taylorhakes/promise-light