Как мне создать очередь на стороне клиента система?

ОБЗОР

Я работаю над проектом и столкнулся с небольшой проблемой в том, что все происходит не в том порядке, в котором я хочу им случиться. Итак, я думал о разработке какой-то очереди, которую я мог бы использовать для организации вызовов функций и других различных инструкций JavaScript / jQuery, используемых во время запуска, то есть во время загрузки страницы. То, что я ищу, не обязательно должна быть структурой данных Queue, это должна быть некоторая система, которая будет гарантировать, что все будет выполняться в указанном мной порядке, и только после завершения предыдущей задачи может начаться новая задача.

I ' Я вкратце рассмотрел jQuery Queue и AjaxQueue , но я действительно понятия не имею, как они работают, поэтому я не уверен, что я хочу использовать именно такой подход ... но я буду продолжать читать об этих инструментах.

СПЕЦИФИКА

В настоящее время я настроил все так, чтобы некоторая работа происходила внутри $ (document) .ready (function () {...}) ; и другая работа происходит внутри $ (window) .load (function () {...}); . Например,


  

... и это действительно утомительно и некрасиво, не говоря уже о плохом дизайне. Поэтому вместо того, чтобы разбираться с этим беспорядком, я хочу разработать довольно универсальную систему, чтобы я мог, например, поставить в очередь $ (). LoadJavaScript (); , затем var script = document.createElement ("сценарий"); , затем $ (). InitializeSymbols (); , затем $ (). InitializeBlock (); и т. д. ... а затем очередь будет выполнять вызовы функций и инструкции, так что после завершения выполнения одной инструкции другая может запускаться, пока очередь не станет пустой вместо того, чтобы повторно вызывать dequeue.

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

НЕКОТОРЫЕ ОСНОВНЫЕ РАБОТЫ

Я написал код для базовой очереди, , который можно найти здесь , но Я хочу расширить его функциональность, чтобы я мог хранить различные типы «Объектов», такие как отдельные инструкции JavaScript / jQuery и вызовы функций, по сути, фрагменты кода, которые я хочу выполнить.

UPDATE

С текущей реализованной мной Очередью, похоже, я могу сохранять функции и выполнять их позже, например:

// a JS file... 
$.fn.LoadJavaScript = function() {

    $.getScript("js/Symbols/Symbol.js");
    $.getScript("js/Structures/Structure.js");
};

// another JS file...
function init() { // symbols and structures };

// index.html
var theQueue = new Queue();
theQueue.enqueue($().LoadJavaScript);
theQueue.enqueue(init);

var LJS = theQueue.dequeue();
var INIT = theQueue.dequeue();

LJS();
INIT();

Я тоже думаю, что ' Мы выяснили, как хранить отдельные инструкции, такие как $ ('# Equation'). html (""); или, возможно, даже операторы if-else или циклы, заключив их как таковые:

theQueue.enqueue(function() { $('#equation').html(""); // other instructions, etc... });

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

WRAP-UP

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

Поскольку это больше вопрос дизайна, чем конкретный вопрос кода , Я ищу предложения по подходу к решению моей проблемы, советы о том, как мне разработать эту систему, но я определенно приветствую и хотел бы увидеть код для поддержки предложений :) Я также приветствую любую критику в отношении Файл Queue.js I ' я связан с вышеупомянутым и / или моим описанием моей проблемы и подходом, который я планирую использовать для ее решения.

Спасибо, Христо

7
задан Hristo 12 January 2011 в 22:37
поделиться