Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #31 (permalink)  
Старый 22.12.2011, 21:37
Аватар для Gozar
Отправить личное сообщение для Gozar Посмотреть профиль Найти все сообщения от Gozar
 
Регистрация: 07.06.2007
Сообщений: 7,504

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

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

Я к тому веду, что как мне используя твою функцию собрать цепочку, но не запускать её? Обернуть в функцию, а потом ещё раз и ещё раз, добавляя по звену, если мне нужно собирать звенья через таймауты(допустим ajax)?

Примеры получаются какие-то абстрактные.
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.
Ответить с цитированием
  #32 (permalink)  
Старый 22.12.2011, 21:50
Аватар для Gozar
Отправить личное сообщение для Gozar Посмотреть профиль Найти все сообщения от Gozar
 
Регистрация: 07.06.2007
Сообщений: 7,504

По поводу передачи переменных между функциями я буду использовать сеттеры/геттеры, меньше геморроя, а код понятнее. Я как-то делал подобным образом, как у тебя. Если код разрастается фиг поймешь что, куда передал.
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.
Ответить с цитированием
  #33 (permalink)  
Старый 22.12.2011, 22:14
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Цитата:
Я к тому веду, что как мне используя твою функцию собрать цепочку, но не запускать её?
Я уже говорил:
w = function(last){
  return wait(function(next){...}).wait(function(next){...}).wait(last)
}


потом, если хочешь запустить, добавив еще функций в стек, пишешь:
w(function(next){...}).wait(funciton(next){...}).wait(function(next){...});
Ответить с цитированием
  #34 (permalink)  
Старый 22.12.2011, 22:31
Аватар для Gozar
Отправить личное сообщение для Gozar Посмотреть профиль Найти все сообщения от Gozar
 
Регистрация: 07.06.2007
Сообщений: 7,504

Я уже запутался, что и как вызывать. То w добавляет в цепочку, то wait да ещё и в функцию обернуть.

Останемся каждый при своём, тебе наверное так удобнее.

Кстати:
var self = this;

можно не писать, если сделать так:

var c = new chain();

    c.
    add(function(){
        setTimeout(function () {

            c.next();

        }, 1000);
    }).
...
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.

Последний раз редактировалось Gozar, 22.12.2011 в 23:58.
Ответить с цитированием
  #35 (permalink)  
Старый 23.12.2011, 06:27
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

Сообщение от FINoM
x-yuri, не вижу смысла городить такой костыль. Человек, если ему захочется передавать через всю цепочку состояния переменных, может просто-напросто передавать объект.
давай называть вещи своими именами. У тебя цепочка функций без состояния. И если нужно добавить состояние, ты его передаешь через параметры функций. У меня цепочка функций - это объект с состоянием. Внимание вопрос, что из этого костыль? Что есть заворачивание цепочки в функцию, чтобы она не вызвалась?

Сообщение от FINoM
http://jsfiddle.net/finom/XSGub/52/ — сделал сделал this для всей цепочки одним объектом (раньше в первой функции this === window). Функции get и set здесь излишни, как по мне.
а теперь непонятно, откуда взялся this. У тебя там только функции.

ты можешь упираться ногами и руками против использования объектов, но что это тебе даст?

Сообщение от Gozar
Примеры получаются какие-то абстрактные.
прямо в точку у кого-нибудь возникала необходимость в этих самых цепочках? Или мы опять решаем абстрактную задачу?
Ответить с цитированием
  #36 (permalink)  
Старый 23.12.2011, 10:47
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Сообщение от x-yuri
у кого-нибудь возникала необходимость в этих самых цепочках?
Скорее не хватило знаний/опыта и этот вариант им кажется самым логичным и лёгким. Вот и вся необходимость.
Если погуглить, то асинхронные приложения писались задолго до появления NodeJS и уже выработались соответствующие паттерны. Но в JS как всегда всё по-своему
__________________
Болтовня ничего не стоит. Покажите мне код. — Linus Torvalds
влад.куркин.рф
Ответить с цитированием
  #37 (permalink)  
Старый 23.12.2011, 11:30
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

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

а асинхронное программирование, о котором можно погуглить, - нечто совсем отличное от асинхронного программирования в js.

Сообщение от B~Vladi
Если погуглить, то асинхронные приложения писались задолго до появления NodeJS и уже выработались соответствующие паттерны. Но в JS как всегда всё по-своему
абстрактно: другой контекст - другое решение. Но ты можешь попробовать привести эти паттерны асинхронного программирования, которые js-программисты отказываются принимать.
Ответить с цитированием
  #38 (permalink)  
Старый 23.12.2011, 12:16
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Сообщение от x-yuri
а теперь непонятно, откуда взялся this. У тебя там только функции.
Да, и в этих функциях this относится к анонимному классу, а не к window.
Сообщение от x-yuri
Или мы опять решаем абстрактную задачу?
Мы решаем задачу поочередного вызова асинхронных функций. Ты предложил сделать объект состояний и функции-геттеры и -сеттеры, я посчитал, что this.state = {} или this.miyobiekt = {} более подходящее решение, чем функции (главное не переопределить объекты в классе). Что не так?
Сообщение от B~Vladi
Скорее не хватило знаний/опыта и этот вариант им кажется самым логичным и лёгким.
Есть другие варианты (кроме аналогов моего костыля, которых достаточно много)?
Ответить с цитированием
  #39 (permalink)  
Старый 23.12.2011, 12:31
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

Сообщение от FINoM
Да, и в этих функциях this относится к анонимному классу, а не к window.
до этого не сложно догадаться, но в моем случае объект присутствует явно, и к чему относится this очевидно. Или по-другому: у тебя там только функции, причем здесь this? А у меня есть объект.

Сообщение от FINoM
Мы решаем задачу поочередного вызова асинхронных функций. Ты предложил сделать объект состояний и функции-геттеры и -сеттеры, я посчитал, что this.state = {} или this.miyobiekt = {} более подходящее решение, чем функции (главное не переопределить объекты в классе). Что не так?
отсутствует связь с реальностью. Где конкретные примеры, которые эта "библиотека" должна решать? Хорошие библиотеки возникают из решения практических задач, а не из теоретических рассуждений. Я тебе советую заняться не библиотеками, а задачами. А библиотеки, они сами появятся.

...продолжу. FINoM, ты стараешься не усложнять. Это твоя причина. Я тоже так старался делать. Но в результате такие решения не выдерживали столкновения с практикой и приходилось их доделывать. B~Vladi, ты делаешь вид что проблемы не существует в ущерб разбиению на классы что ли. Причина: производительность и прямолинейность. Прямолинейность делает реализацию прозрачной, но при этом сложно увидеть намерения. Прозрачность намерений или выразительность - это тот самый прямой путь, о котором я говорил.
Ответить с цитированием
  #40 (permalink)  
Старый 23.12.2011, 13:34
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Сообщение от x-yuri
библиотека
Я нигде не называл это библиотекой.
Сообщение от x-yuri
Где конкретные примеры
Примеры я уже приводил, вот хотя-бы этот:
Цитата:
Рассмотрим пример (который взят из головы и в нем возможны ошибки) гипотетического парсера сайта, который после парсинга заносит данные в БД, и, после занесения, вызывает некоторый код.
var html = '';
request.on('response', function (response) {

    response.on('data', function (chunk) {
        html = html + chunk;
    });

    response.on('end', function() {
        //какой-то парсер
        parse(html, function(data){  
                //какая-нибудь функция, добавляющая данные в базу
        addToDatabase(data, function() {  
            doSomething();
        })
    });

    });
});



Много вложенных колбеков — не есть гуд, пробуем по-другому.
var html = '';
var responceOnEnd = function() {
    parse(html, parsed);
}
    
var parsed = function(data){ 
    addToDatabase(data, addedToDatabase)
}

var addedToDatabase = function() {
    doSomething();
}

request.on('response', function (response) {

    response.on('data', function (chunk) {
        html = html + chunk;
    });

    response.on('end', responceOnEnd);
});



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

Я предлагаю сделать вот так:

wait(function(runNext){
    request.on('response', runNext);
}).wait(function(runNext, response){
    response.on('data', function (chunk) {
        html = html + chunk;
    });
    
    response.on('end', function() {
        runNext(html);
    });
}).wait(function(runNext, html){
    parse(html, runNext);
}).wait(function(runNext, data){
    addToDatabase(data, runNext);
}).wait(function(){
    doSomething();
})


Сообщение от x-yuri
до этого не сложно догадаться, но в моем случае объект присутствует явно, и к чему относится this очевидно. Или по-другому: у тебя там только функции, причем здесь this? А у меня есть объект.
Это дело твоё, хочешь, напиши функции setState, getState, я ведь тебе не указ, как и ты мне. Пишем так, как каждый считает лучшим, не без советов, к которым я стараюсь прислушиваться.
Сообщение от x-yuri
ты стараешься не усложнять
Да, ты прав, я люблю, когда всё просто. Самые популярные вещи — просты в использовании, посмотри на ту же "быдло-библиотеку" jQuery.
Сообщение от x-yuri
Но в результате такие решения не выдерживали столкновения с практикой и приходилось их доделывать.
А если усложнить, то, вполне возможно, придется переделывать. Ты сам пишешь:
Сообщение от x-yuri
Хорошие библиотеки возникают из решения практических задач
что бы это не значило, нужно отталкиваться от практических задач.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Мой сайт. Логические игры. MininAS Ваши сайты и скрипты 45 20.09.2013 23:22
Оцените мой сайт: Большой Русский Форум ФОРУМ Ваши сайты и скрипты 2 16.05.2010 13:27
Мой сайтик маримьяна Ваши сайты и скрипты 4 15.04.2009 14:32
Синхронный запрос данных по AJAX Shasoft AJAX и COMET 2 03.03.2009 14:07