Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #21 (permalink)  
Старый 22.12.2011, 10:19
Аватар для vflash
Профессор
Отправить личное сообщение для vflash Посмотреть профиль Найти все сообщения от vflash
 
Регистрация: 09.07.2007
Сообщений: 304

Сообщение от x-yuri
ничего не понял
есть цепочка. наполнение идет через вызов функции sync(A). Если A функция sync(function(){...}) то она просто добавляется . если sync() то добавиться блокировку и вернет функцию вызов которой снимет блокировку. дальше просто выполняем функции по цепочке, а если встречается блокировка то ждем пока не разблокируют.

как пример применения. нужно сделать несколько асинх. запросов, дождаться их завершения и выполнить какую-то функцию. Тоесть ставим несколько блокировок, а после них нужную функцию. А вот в методом FINoM такое не сделать.
__________________
лучшая rss читалка zzreader.com
Ответить с цитированием
  #22 (permalink)  
Старый 22.12.2011, 13:47
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

vflash, так тебе не цепочка, а defered тогда нужен

Последний раз редактировалось x-yuri, 22.12.2011 в 17:06.
Ответить с цитированием
  #23 (permalink)  
Старый 22.12.2011, 16:54
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Сообщение от x-yuri
Во-первых, вызова первой функции ты не ждешь.
Я как бы жду, чтоб она выполнилась.
Сообщение от x-yuri
this.state = function(name, value) {...
Ну гетить и сетить значения чего-либо в методе — это я умею. Вот только не пойму, к чему это.
Ответить с цитированием
  #24 (permalink)  
Старый 22.12.2011, 17:06
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

к тому что на данный момент ты подразумеваешь, что значения будут передаваться между соседними функциями
waiting(function(runNext) {
    runNext(1, 2, 3, 4, 5, 6, 7, 8, 9);
})
.wait(function(runNext, v1, v2, v3, v4, v5, v6, v7, v8, v9) {...})
.wait(function(runNext, v1, v2, v3, v4, v5, v6, v7, v8, v9) {...})
.wait(function(runNext, v1, v2, v3, v4, v5, v6, v7, v8, v9) {...})
.wait(function(runNext, v1, v2, v3, v4, v5, v6, v7, v8, v9) {
    // и только здесь нам пригодятся эти значения
})

альтернативный вариант
new AsyncChain()
    .add(function(NEXT) {
        this.state('a1', 1);
        this.state('a2', 2);
        this.state('a3', 3);
        this.state('a4', 4);
        this.state('a5', 5);
        this.state('a6', 6);
        this.state('a7', 7);
        this.state('a8', 8);
        this.state('a9', 9);
        NEXT();
    })
    .add(function(NEXT) {...})
    .add(function(NEXT) {...})
    .add(function(NEXT) {...})
    .add(function(NEXT) {
        // а теперь используем их, this.state('a...');
    })
    .go();
Ответить с цитированием
  #25 (permalink)  
Старый 22.12.2011, 17:20
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

x-yuri, не вижу смысла городить такой костыль. Человек, если ему захочется передавать через всю цепочку состояния переменных, может просто-напросто передавать объект.
wait(function(next){
  var states = {a: 1, b: 2}
  next(states);
}).wait(function(next, states){
  states.c = 3;
  next(states);
}).wait(function(next, states){
  states.d = 4;
  states.e = 5;
});
Ответить с цитированием
  #26 (permalink)  
Старый 22.12.2011, 18:20
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

http://jsfiddle.net/finom/XSGub/52/ — сделал сделал this для всей цепочки одним объектом (раньше в первой функции this === window). Функции get и set здесь излишни, как по мне.
wait(function(next){
  this.blabla = {a:1,b:2}
  next();
}).wait(function(next){
  this.blabla.c = 3;
  next()
}).wait(next) {
  log(this.blabla); // {a:1, b:2, c:3}
});
Ответить с цитированием
  #27 (permalink)  
Старый 22.12.2011, 19:00
Аватар для Gozar
Отправить личное сообщение для Gozar Посмотреть профиль Найти все сообщения от Gozar
 
Регистрация: 07.06.2007
Сообщений: 7,504

Можно присоединится?,
сейчас в голову велосипед приехал:

var chain = function () {};

chain.prototype.deferred = [];

chain.prototype.add = function (fn) {
    this.deferred.push(fn);
    return this;
}
chain.prototype.next = function () {
    if (this.deferred.length) {
        this.deferred.shift().apply(this);
    }
}
chain.prototype.start = function () {
    this.deferred.shift().apply(this);
}




new chain().
    add(function(){
        var self = this;
        setTimeout(function () {
            console.log(1);
            self.next();
        }, 1000);
    }).
    add( function(){
        var self = this;
            setTimeout(function () {
                console.log(2);
                self.next();
            }, 1000);
    }).
    add( function(){
        console.log(3);
    }).
    start();
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.
Ответить с цитированием
  #28 (permalink)  
Старый 22.12.2011, 20:11
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Цитата:
start();
Лишний метод. Если человек хочет запустить цепь потом, проще сделать так:
w = function(){
  return wait(...).wait(...)
}
w();

Цитата:
self.next();
Я сперва тоже так думал, но
var self = this;
тоже кажется излишним.

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

Сообщение от FINoM Посмотреть сообщение
Лишний метод. Если человек хочет запустить цепь потом, проще сделать так:
w = function(){
  return wait(...).wait(...)
}
w();
А как по поводу такого? Он не лишний, он позволяет делать так:

var chain = function () {};

chain.prototype.deferred = [];

chain.prototype.add = function (fn) {
    this.deferred.push(fn);
    return this;
}
chain.prototype.next = function () {
    if (this.deferred.length) {
        this.deferred.shift().apply(this);
    }
}
chain.prototype.start = function () {
    this.deferred.shift().apply(this);
}




var a = new chain().
    add(function(){
        var self = this;
        setTimeout(function () {
            console.log(1);
            self.next();
        }, 1000);
    }).
    add( function(){
        var self = this;
            setTimeout(function () {
                console.log(2);
                self.next();
            }, 1000);
    }).
    add( function(){
        console.log(3);
        this.next();
    });

setTimeout(function(){
    console.log('добавим чего-нибудь в цепь');
    a.add(function(){
        console.log(4);
    }).start();
},2000);



Сообщение от FINoM Посмотреть сообщение
Я сперва тоже так думал, но
var self = this;
тоже кажется излишним.
С этим пока не знаю что делать, может забить?

Сообщение от FINoM Посмотреть сообщение
+ у тебя теряется целостность. Если последний коллбек сработал, следующие звенья не запустятся.
Можно пример? Не понимаю.
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.

Последний раз редактировалось Gozar, 22.12.2011 в 20:45.
Ответить с цитированием
  #30 (permalink)  
Старый 22.12.2011, 21:14
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Цитата:
А как по поводу такого?
Цитата:
С этим пока не знаю что делать, может забить?
Ну тебе виднее, это твой скрипт. Лично мне кажется лишним вызов конструктора.
Цитата:
Не понял?
Вот пример с большим таймаутом: http://jsfiddle.net/finom/XSGub/55/
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Мой сайт. Логические игры. 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