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

Например, чтобы выполнить поочередно функции func1, func2, func3 с разными задержками я бы сходу написал так приблизительно.
http://view.xscreenshot.com/27176829beaa…
Можно, конечно, красивее, но я не вижу (не знаю) как таймауты использовать по-другому.

Хотелось бы аналог sleep() в php. Чтоб можно было добавить произвольные функции и произвольные задержки между ними, а не вкладывать таймауты внутрь друг-друга

В итоге для моей довольно абстрактной задачи (just for fun) получить следующее:
пользователь скидывает в некую область драг-н-дропом квадратики-действия, ставит между ними паузы и запускает. Наблюдает, как скрит выполняет очередь.
Для моего примера как-то так:

Очередь Доступные
===== =======
func1 func5,func6,delay(x)
delay(1)
func2
delay(2)
func3
delay(3)

Tagged with →  

26 Responses to Я, возможно, спрашиваю глупость, но как можно на клиенте организовать очередь выполнения функций, вставляя между ними таймауты?

  1. Ycihlam:

    в конце два столбика, в одном очередь с затащенными(!) туда действиями func1,func2,func3
    В правом столбце доступные действия func5,func6…

  2. UpaFcuk:

    аналога нету. только через setTimeout всё

  3. UpaFcuk:

    можно так )
    var t=0;
    setTimeout(func1, t+=1000);
    setTimeout(func2, t+=2000);
    setTimeout(func3, t+=3000);

  4. KriYes:

    Ну, список (стек) функций с таймаутами и функция-диспатчер, которая запускает себя по setTimeout

  5. UpaFcuk:

    Простите за задротство, но скорее не «стэк», а «очередь» (queue)

  6. RedSm:

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

  7. NitSm:

    Для цепочек есть вот такая библиотека, наверно немного проще чем у jquery будет посмотреть.

  8. PeeZlo:

    : Вы по-моему не поняли суть. Проблема автора поста не в том, что он не может функции по очереди вызвать, а в том, что ему не нравится отсутствие функции в жаваскрипте.

    И без хаков ее по-моему не реализуешь.

    http://pastebin.com/0JYf1491

  9. Ycihlam:

    хороший ник, кстати.

  10. Ycihlam:

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

  11. Ycihlam:

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

  12. Ycihlam:

    если я правильно понимаю, то цепочки выполняются все равно одновременно?

    Фактически, мне бы временно, в рамках каких-то нужно все функции выполнять по onSuccess предыдущей, но я не представляю как переопределить событие нормальной очередности в этот самы onSuccess

  13. PeeZlo:

    Гугли по ключевому слову Deferred, если хочешь найти что-то из готового фреймворка. Но там будут все те же хаки (т.е. тебе надо разделять «обычные» функции и асинхронные объекты аля delay, и последним навешивать колбеки).

  14. PeeZlo:

    (Это кстати отличное место чтобы удариться в изучение функционального программирования, разобраться в прелестях continuation-passing-style и погрустить о том, что в яваскрипте нет call-with-current-continuation).

  15. UpaFcuk:

    По-простому так можно:

    Демо

  16. UpaFcuk:

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

  17. UpaFcuk:

    Вся фишка в том, что объект просто возвращает сам себя каждый раз.

  18. RedSm:

    погрустить о том, что в яваскрипте нет call–with–current–continuation

    Пичалька. :'(

  19. RedSm:

    так точно.

  20. 9nibad:

    можно сделать , исползуя $.ajax и timeout для запроса к несуществующему хосту (если такое извращение не заработает, значит можно сделать скрипт на пхп, который отдаст содержимое через некоторое кол-во секунд)

  21. RedSm:

    Это же вообще ад )

  22. Regwhite:

    почему это хаки-то? это возможности прекрасного языка 🙂

  23. Regwhite:

    фу фу фу, вон отсюдова

  24. 9nibad:

    бар бар бар!

  25. PeeZlo:

    Хаки потому что хотелось бы написать (1000) а приходится писать какие-то асинхронные хренотени.
    Но тут не столь в языке дело, сколь в том, что браузерный УИ вместе с яваскриптом в одном треде бегают, и усыплять его в принципе неразумно.

Добавить комментарий