[Асинхроность и nodejs] Кто что использует против callback hell и почему?
Добрый день всем.
Связавшись с nodejs и выбрав его как основу новому проекту, я столкнулся с чем-то новым и поначалу очень не понятным для меня, это была асинхроность. Весь мой код был похож на пирамидки из колбеков стремящихся к правому краю экрана. Со временим открыл для себя пару вариантов async и Q. Пытался подружиться с fibrous-ом, но увы. Что-то слышал про yields и генераторы, но тоже не срослось. Хотел бы услышать ваше мнение по этому вопросу и узнать есть ли понацея?
Как по мне, рвотные позывы скорее вызывают <a href="http://maxtaco.github.io/coffee-script/#try:sleepRandom%20%3D%20(time%2C%20callback)-%3E%0A%20%20await%20setTimeout%20defer()%2C%20time%20*%201000%0A%20%20callback%20Math.random()%20*%201000%20%7C%200%0A%0Aconsole.log%20'start'%0Aawait%20sleepRandom%205%2C%20defer%20a%0Aconsole.log%20'sleep%205%20sec%2C%20a%20%3D%20'%20%2B%20a%0Aawait%20sleepRandom%206%2C%20defer%20b%0Aconsole.log%20'sleep%206%20sec%2C%20b%20%3D%20'%20%2B%20b%0Aawait%20sleepRandom%207%2C%20defer%20c%0Aconsole.log%20'sleep%207%20sec%2C%20c%20%3D%20'%20%2B%20c%0Aconsole.log%20'a%20%2B%20b%20%2B%20c%20%3D%20'%20%2B%20(a%20%2B%20b%20%2B%20c)%0A">результаты компиляции</a> IcedCoffee. До перехода на LiveScript на нём и сидел.
ну сравним
sleepRandom = !(time, callback)->
<- setTimeout _, time * 1000
callback Math.random! * 1000 .|. 0
log \start
a <- sleepRandom 5
log 'sleep 5 sec, a = ' + a
b <- sleepRandom 6
log 'sleep 6 sec, b = ' + b
c <- sleepRandom 7
log 'sleep 7 sec, c = ' + c
log 'a + b + c = ' + (a + b + c)
и
sleepRandom = (time, callback)->
await setTimeout defer(), time * 1000
callback Math.random() * 1000 | 0
console.log 'start'
await sleepRandom 5, defer a
console.log 'sleep 5 sec, a = ' + a
await sleepRandom 6, defer b
console.log 'sleep 6 sec, b = ' + b
await sleepRandom 7, defer c
console.log 'sleep 7 sec, c = ' + c
console.log 'a + b + c = ' + (a + b + c)
А что вы смотрите результат компиляции на node.js ?
я вот нет, и дебага через @map source + ide хватает за глаза!
А код должен быть читаем для программиста а не машины
На вкус и цвет... LS кода визуально в 1,5 раза меньше, он легко читаем => он красивее. Результаты компиляции на ноде я смотрю часто, далеко не ради отладки, а потому, как:
1. Важна производительность.
2. Один и тот же код часто идет и на сервер, и на клиент. Тут важен размер. 452 байта LS, тот же код, что был бы написан и на чистом js, против 1920 + подключенная библиотека у ICS.
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.