LINUX.ORG.RU
ФорумTalks

Первая неделя знакомства с Node.js на работе

 


2

1

Дали задание написать Rest сервис по хранению файлов с поддержкой версионирования и отдачи определнной/последней версии. Короче, я уже понял, что такое callback hell. Никакого энтузиазма. А вот при знакомстве 4-5 лет назад с Python/Django у меня была такая эйфория.Потому что язык классный. И да, слышал про одного пацана, который писал все на JavaScript, и клиент, и сервер, говорил что нравится, удобно, читабельно. Потом его в дурку забрали, конечно.Похоже через 3 месяца и меня туда заберут. Хотя нет, там слава тебе господи цивилизованный C# на клиентах.

Зато модно, стильно, молодежно.

Короче, я уже понял, что такое callback hell

вы просто не умеете готовить спагетти

Похоже через 3 месяца и меня туда заберут

меньше народу - больше кислороду

dib2 ★★★★★
()

Как понять callback hell?
Тебе еще понравится, погоди, ничего другого знать не захочешь.

uin ★★★
()
Ответ на: комментарий от EnterpriseMobility

А, всмысле то что синтаксис громоздкий? Ну это да, какого нибудь лайв парсера сильно не хватает, вообще странно что до сих пор ничего такого еще не сделали, помойму даже для c/obj-c такое уже есть

uin ★★★
()

Я вот все не пойму, у этих жээсников с мозгами туго, что они корутины заюзать не могут, или это родовая травма екма?

// abstract language itt

// worker coroutine

Func dorequest()
  Try
    Object = getjson(...)
  Except (error)
    Showerror(error)
    Return false // or rethrow

  // next steps...
  Show(object)

  Return true

Func getjson(...) // actually built-in
  Sendrequest(...)
  Status, error, object = yield() // freezes coroutine and returns to app loop
  If status
    Throw error
  Else
    Return object

...

// main context (builtin)

Worker = coroutine(workersource)

Runloop.onjson = func (...)
  Worker.resume(...)

Worker.start()
Runloop.runforever()

arturpub ★★
()

путхонисты вообще больные, и нормальные языки без табов вместо {} понять неспособны. так что в дурке вам и место.

waker ★★★★★
()
Ответ на: комментарий от arturpub

корутины

Кого?

путхонисты вообще больные, и нормальные языки без табов вместо {} понять неспособны. так что в дурке вам и место.

Ну в JS {} это же не просто разделитель какой то, а Object, насколько я понимаю в обычных процедурных языках не так.

uin ★★★
()
Ответ на: комментарий от uin

Кого?

Омфг.

С корутинами код по ссылке выглядел бы как-то так:

try {
  for (file in fs.readdir(source)) {
    console.log(filename)
    values = gm(source + filename).size()
    console.log(filename + ' : ' + values)
    aspect = (values.width / values.height)
    for (width, widthIndex in widths) {
      height = Math.round(width / aspect)
      console.log('resizing ' + filename + 'to ' + height + 'x' + height)
      this.resize(width, height).write(destination + 'w' + width + '_' + filename)
    }
  }
}
except (err) {
  console.log('Error: ' + err)
}

И работал бы так же асинхронно, но жээс и «ведущие мировые специалисты по созданию языков и построению веб-фреймворков» продолжают грызть любимые кактусы.

в JS {} это же не просто разделитель какой то, а Object

Имхо путаешь синтаксис скопов и создания объектов, но тыкать это поделие на букву «ж» я не стану, чтобы удостовериться.

arturpub ★★
()
Ответ на: комментарий от arturpub

Омфг.

А что омфг я с ними мало сталкивался, пока не нужны, ну или по крайней мере я не вижу в них для себя необходимости (но не значит что ее нет совсем)

except (err)

catch (err) и еще
finally ()

И работал бы так же асинхронно, но жээс и «ведущие мировые специалисты по созданию языков и построению веб-фреймворков» продолжают грызть любимые кактусы.

Там где работает ЖС пистон не всунешь же, он крепко накрепко связан с браузерами, c css c html.

Имхо путаешь синтаксис скопов и создания объектов, но тыкать это поделие на букву «ж» я не стану, чтобы удостовериться.

да нет вроде var obj = {}
obj будет пустой объект

uin ★★★
()
Последнее исправление: uin (всего исправлений: 1)
Ответ на: комментарий от arturpub

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

Vit ★★★★★
()

сталкивался с Node.js как админ. как админ и отплевывался. пионерская поделка. а что такое callback hell?

crypt ★★★★★
()
Ответ на: комментарий от arturpub

(На случай, если непонятно: оригинальный fs.readdir асинхронно читает некий ресурс/папку и вызывает коллбэк либо со всем содержимым, либо с каждым итемом. Точно не знаю, но это не важно. Корутино-ориентированный fs.readdir также либо ресюмится целым массивом, либо ресюмится итерационным генератором. Разумеется, речь о сферическом нод-жээсе в вакууме, т.к. я в душе не ипу, есть там корутины и итерационность на генераторах, или нет. Пример был чисто показать, как это выглядело бы, не будь оно примитивным недобейсиком. Структурно этот код также отправляет асинхронный запрос, вылетает в ранлуп, и по пришествию события вызывает, только не функцию вызывает, а ресюмит корутину с результатом. Совершенно по-другому здесь только это.)

arturpub ★★
()
Ответ на: комментарий от arturpub

Именно, что оригинал работает с каждым итемом. Асинхронно. fs.readdir() вернёт массив. Когда дочитает. И если хватит памяти.

Xellos ★★★★★
()
Последнее исправление: Xellos (всего исправлений: 1)
Ответ на: комментарий от Xellos

Ресюмить в таких случаях можно поитемно, в итерационный генератор. Он возвращается из fs.readdir, который по факту вообще ничего не делает. При вызове-итерации шлет next фреймворку (или что там делает оригинал), yield-ится, событие его ресюмит с очередным итемом.

Так разницы не будет?

arturpub ★★
()
Ответ на: комментарий от arturpub

Думаешь, почему все пишут xxx.each(function (i, elem) {}) ? Дураки потому что?

Xellos ★★★★★
()

JS на сервере и C# на клиенте? Из какой параллельной вселенной эта контора к нам свалилась? Обычно как раз наоборот.

reserved
()
Ответ на: комментарий от Xellos

for .. in работает с массивами. Или объектами. Это не C++, здесь синтаксис своего смысла не меняет.

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

Думаешь, почему все пишут xxx.each(function (i, elem) {}) ? Дураки потому что?

Кто все? Жээсники может быть. Как тут принято отвечать, «отучаемся говорить за всех» ;)

arturpub ★★
()
Ответ на: комментарий от umren

Люди много чего делают, но это не значит, что это хорошо для всех

buddhist ★★★★★
()
Ответ на: комментарий от arturpub

будь жээс богат на концепции

- Чо вы дебилизмом занимаетесь, пишите на корутинах, как в питоне!
- В JS нет корутин, как в питоне.
- Значит, пишите на питоне! Или на таком JS, в котором есть!

Если бы у бабушки были яйца, некоторые не оффтопили бы так жестоко.

Xellos ★★★★★
()
Ответ на: комментарий от Xellos

Оффтоп это отвечать на адекватный рант-сабж «все нормально, у нас так принято все делать на костылях, и это хорошо, мы же не дураки, да». Ржу с жээсников, я думал это упоротый анонiмус чо-то в лоб не осиливает, а там и правда нечего жD Сами глаза закрыли, думают их каки другим не видно.

(Я кстати не писатель на питоне и не призывал.)

arturpub ★★
()

А вот при знакомстве 4-5 лет назад с Python/Django у меня была такая эйфория

И как там решались проблемы асинхронности? Или нет поддержки асинхронности - нет проблемы?

Reset ★★★★★
()
Ответ на: комментарий от crypt

Это острая необходимость передать функцию в функцию, которую передать в функцию, которую передать в функцию и т.д. Судя по всему это было основной причиной создания ноды.

ya-betmen ★★★★★
()

Подожди, подожди... У вас на сервере работает яваскрипт, а на клиенте - сишарп?????? Я правильно понял?

Копи деньги и вали оттуда!

Shadow ★★★★★
()
Последнее исправление: Shadow (всего исправлений: 1)
Ответ на: комментарий от EnterpriseMobility

Хз, там докуя либ и функций, на которых реализуются любые извращения. Или нынче «серверные» только те, что кроме http не разумеют?

Shadow ★★★★★
()
30 октября 2014 г.
Ответ на: комментарий от umren

ну начал я использовать этот ваш асинк.

Все равно код хуевый. И Webstorm его не умеет форматировать

А промисы говорят тормозят и их нельзя юзать где попало

EnterpriseMobility
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.