Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   Мой синхронный костыль (https://javascript.ru/forum/project/24115-mojj-sinkhronnyjj-kostyl.html)

FINoM 27.12.2011 19:53

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

x-yuri 27.12.2011 23:43

Цитата:

Сообщение от FINoM
Ну а если мы хотим вызвать цепочку, то получится так: ...add().add().add()() ← видишь?

круто, оказывается есть и преимущества :)

Цитата:

Сообщение от FINoM
Ты же хочешь использовать всякие вещи, типа this.state в функциях. Получается, что в обработчиках (oncomplete, onfailure) this будет элементом из события (в случае прямого запуска это будет window), а в функциях из цепочки this будет являться объектом chain?

не понял, да, хочу использовать this.state в функциях. Плюс, не хочу использовать много разных правил для разных случаев, поэтому правило одно: в обработчике события this указывает на объект, который сгенерировал событие.

Цитата:

Сообщение от FINoM
Кто определяет как должно быть?

я имел в виду, что твой пример скрывает недостатки твоего подхода

Цитата:

Сообщение от FINoM
Блин, привел же.

ладно, привел. Но по нему непонятно, достаточную функциональность предоставляет твоя функция или нет. Приведешь самую сложную цепочку, с которой сталкивался, с указанием всех данных, которые передаются? Может вообще окажется, что прав B~Vladi

Цитата:

Сообщение от FINoM
Значит для него вложенные вызовы — это нормально.

нет, он их по классам распихивает и большая вложенность не возникает

Цитата:

Сообщение от FINoM
Описана задача сделать этот код более плоским.

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

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

Цитата:

Сообщение от FINoM
Каких именно? Приведи хотя-бы одно.

да тот же async, который ты в статье упомянул, например. Но ни одним таким не пользовался и по сути не написал ни одного приложения на ноде, если ты об этом.

UPD и можно еще добавить, что B~Vladi считает, что поблема не существует. Тут опять же можно столкнуться с задачей, для которой нужно создавать объекты просто чтобы избежать вложенности.

FINoM 27.12.2011 23:53

Цитата:

Сообщение от x-yuri
не понял, да, хочу использовать this.state в функциях. Плюс, не хочу использовать много разных правил для разных случаев, поэтому правило одно: в обработчике события this указывает на объект, который сгенерировал событие.

Если он будет указывать на объект, сгенерировавший событие, то нам не будут доступны методы нашего класса, this.state, в частности.
Цитата:

Сообщение от x-yuri
Приведешь самую сложную цепочку, с которой сталкивался, с указанием всех данных, которые передаются?

Нет, мне просто лень :D
Цитата:

Сообщение от x-yuri
нет, он их по классам распихивает и большая вложенность не возникает

Молодец, что уж там. Если есть задача сделать с ООП, то ок. Если нужно сделать какую-то тривиальную фигню, что я привел (те же анимации), то нефиг.
Цитата:

Сообщение от x-yuri
Ты специально не хочешь понимать о чем я говорю?

Я понимаю, что ты хочешь, чтоб я уселся делать рабочий пример. Спор не стоит пары часов моей работы.
Цитата:

Сообщение от x-yuri
да тот же async, который ты в статье упомянул, например.

То же самое, только с другим синтаксисом. Зато там (в функции waterfall) нет сложных вещей, просто такой-же последовательный вызов функций с коллбеками.

FINoM 27.12.2011 23:55

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

x-yuri 28.12.2011 05:14

Цитата:

Сообщение от FINoM
Если он будет указывать на объект, сгенерировавший событие, то нам не будут доступны методы нашего класса, this.state, в частности.

нет, там один объект - цепочка, все доступно

Цитата:

Сообщение от FINoM
Нет, мне просто лень

Цитата:

Сообщение от FINoM
Я понимаю, что ты хочешь, чтоб я уселся делать рабочий пример. Спор не стоит пары часов моей работы.

стоит, за это время ты можешь решить, что никому не нужен еще один велосипед :) А потом люди удивляются, что internet is for porn... Хотя, конечно, это только одна сторона правды :)

Цитата:

Сообщение от FINoM
Молодец, что уж там. Если есть задача сделать с ООП, то ок. Если нужно сделать какую-то тривиальную фигню, что я привел (те же анимации), то нефиг.

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

Цитата:

Сообщение от FINoM
То же самое, только с другим синтаксисом. Зато там (в функции waterfall) нет сложных вещей, просто такой-же последовательный вызов функций с коллбеками.

так ты признаешь, что async лучше твоей реализации?

Цитата:

Сообщение от FINoM
И да, кстати, чем пример с анимациями тебе не нравится? Последовательные анимации вполне себе повседневная задача, в отличии от работы с нодой.

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

FINoM 28.12.2011 05:24

Цитата:

Сообщение от x-yuri
нет, там один объект - цепочка, все доступно

Там ведь доступно событие, ты же сам сказал.
Цитата:

Сообщение от x-yuri
для тривиальных задач проблема вообще отсутствует, можно без цепочек обойтись

Можно, только получится лапша-код.
Цитата:

Сообщение от x-yuri
так ты признаешь, что async лучше твоей реализации?

Как можно сравнивать целую библиотеку с одной функцией?
Цитата:

Сообщение от x-yuri
А по поводу анимаций, у библиотек обычно свой интерфейс для этого имеется.

Какой?

x-yuri 28.12.2011 10:29

Цитата:

Сообщение от FINoM
Там ведь доступно событие, ты же сам сказал.

где я это сказал?

Цитата:

Сообщение от FINoM
Можно, только получится лапша-код.

а для тебя это такой четкий критерий: лапша/нелапша? И единственный?

FINoM 28.12.2011 18:53

Цитата:

Сообщение от x-yuri
где я это сказал?

Цитата:

Сообщение от x-yuri
е понял, да, хочу использовать this.state в функциях. Плюс, не хочу использовать много разных правил для разных случаев, поэтому правило одно: в обработчике события this указывает на объект, который сгенерировал событие.

Цитата:

Сообщение от x-yuri
а для тебя это такой четкий критерий: лапша/нелапша? И единственный?

Нет

x-yuri 29.12.2011 02:10

ты меня не правильно понял, хотя я не знаю как это еще можно было понять
var chain = new AsyncChain()
    .setOptions({
        onComplete: function() {
            // this указывает на объект, который сгенерировал событие - chain
        }
    })
    .add(function() {
        // функция выполняется в контексте цепочки
        this.fireEvent('complete')   // this -> chain
    })


Цитата:

Сообщение от FINoM
Нет

хотя дело не в единственный/один-из. Просто требования могут быть разные: кто-то может все действия в цепочки выстраивать, а кто-то наоборот писать все функции с колбеками. И тут не надо забывать, что 20% усилий из ста не приносят заметного результата... а бывает и наоборот, создают проблемы...


Часовой пояс GMT +3, время: 23:13.