IcedCoffeeScript или jQuery отложено

Недавно, работая над проектом Backbone.JS/jQuery/CoffeeScript, я оказался в беспорядке проблем обратного вызова и времени. Мне нужно было дождаться чего-то, чтобы закончить, прежде чем продолжить, и оказался в беспорядке вложенных обратных вызовов... что запутывает и трудно отлаживает. Затем я нашел 2 возможных решения jQuery отложен или IcedCoffeeScript

IcedCoffeeScript выглядит очень просто, просто добавив await и defer. Тем не менее, мне интересно, остаться там? Только 2 вопроса здесь на StackOverflow? Не так много говорить об этом по сравнению с CoffeeScript

Другое дело, в чем разница между двумя методами, похоже, они делают в основном одно и то же? За исключением IcedCoffeeScript, он больше похож на процедурный код, а в jQuery отложен, он не решает мой беспорядок обратных вызовов как можно больше

Ответ 1

Это очень разные технологии:

  • IcedCoffeeScript - это прекомпилятор, который расширяет CoffeeScript с помощью ключевых слов await и defer, которые преобразуют код для вас, чтобы вы могли писать код в синхронном стиле. В сгенерированном JavaScript await и defer производят вложенные функции.

  • jQuery Отложенные (aka Promises) - это способ взаимного обратного вызова: вместо того, чтобы выполнять обратный вызов, функция async может возвращать Promise. Затем вы присоединяете обратные вызовы к обещанию. Это простая, но мощная техника. Я посвящаю ему главу в моей книге Async JavaScript.

Каждая из этих технологий работает лучше всего с определенным видом API. await и defer ожидают, что функция примет один обратный вызов в качестве последнего аргумента. Promises работает лучше всего, когда у вас много других Promises в вашем приложении.

Там нет волшебной пули для работы с асинхронным поведением в JavaScript. Вам нужно понять обратные вызовы, Promises и PubSub (aka EventEmitter s) и выбрать лучший инструмент для каждого задания. Даже если вы используете IcedCoffeeScript (это круто), еще есть моменты, когда Promises сэкономит вам огромную работу.

Надеюсь, это поможет. Посмотрите мою книгу, Async JavaScript, для получения более подробной информации.

Ответ 2

Я думаю, что IcedCoffeeScript останется здесь.

Я планирую поддерживать его на неопределенный срок, и я довольно регулярно исправляю его против магистрали. Я использую его практически во всех моих личных проектах, а сайт Combosaurus.com, проект OkCupid Labs, который собирается попасть в общий релиз, написан на IcedCoffeeScript.

Ответ 3

Я написал сообщение в блоге о различиях между стандартными обратными вызовами, pub sub и отложенными сообщениями, которые могут вам помочь:

Событие Эмитент, Паб Sub или Отложенный Promises... который вы должны выбрать?

Вступление гласит:

Очевидный ответ на вопрос "если вы выберете событие Emitter, Pub Sub или Deferred/ Promises" заключается в том, что это зависит от того, что вы делаете.

В этом посте я расскажу немного о том, как каждый шаблон работает с (очень) базовых реализаций, а затем я смотрю на причины, почему вы можете выбрать один за другим.

И итог:

Event Emitter - это настоящая классика, которая позволяет контролировать происходящее; Паб Sub более гибкий для кросс-компонентные события; Отложенные и Promises дают мощный способ обрабатывать обратные вызовы.

Применение резюме к вашей проблеме - я бы предположил, что Deferred и Promises, вероятно, помогут вам многое.

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

Ответ 4

О, я бы определенно полагался на IcedCoffeeScript. Если вам нравится и использовать синтаксис CoffeeScript, вы обнаружите, что он просто "смешивается" с ним естественно...

Что касается будущего проекта, у меня была одна и та же дилемма некоторое время назад, но похоже, что Maxwell Krohn активно поддерживает его, и там растет сообщество и осведомленность вокруг него (хорошо, может быть, здесь еще нет stackoverflow).

Я начал использовать его в прошлом году, и теперь я не мог себе представить, как кодировать "реальные" приложения без await и defer.

Вы можете найти краткое "проталкивание" на элегантном асинхронном потоке управления с ICS здесь, и я также написал 5-частную иронически названная статья об использовании Node.js для общих веб-проектов здесь, в которой упоминается ICS.