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

ОБЗОР

Я работаю над проектом и столкнулся с небольшой проблемой в том, что все происходит не в том порядке, в котором я хочу им случиться. Итак, я думал о разработке какой-то очереди, которую я мог бы использовать для организации вызовов функций и других различных инструкций 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();

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

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

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

WRAP-UP

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

Поскольку это больше вопрос дизайна, чем конкретный вопрос кода , Я

Я реализовал простые классы TCP-сервера и TCP-клиента, которые могут отправлять сообщение от клиента к серверу, и сообщение будет преобразовано в верхний регистр на стороне сервера, но как я могу добиться передачи файлов с сервера на клиент и загрузки? файлы от клиента к серверу. у меня есть следующие коды.

TCPClient.java :

import java.io.*;
import java.net.*;

class TCPClient {
 public static void main(String args[]) throws Exception {
        String sentence;
        String modifiedSentence;
        BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));
        Socket clientSocket = new Socket("127.0.0.1", 6789);
        DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
        BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
        sentence = inFromUser.readLine();
        outToServer.writeBytes(sentence + "\n");
        modifiedSentence = inFromServer.readLine();
        System.out.println("FROM SERVER:" + modifiedSentence);
        clientSocket.close();
    }
}

TCPServer.java :

import java.io.*;
import java.net.*;

class TCPServer {
    public static void main(String args[]) throws Exception {
        int firsttime = 1;
        while (true) {
            String clientSentence;
            String capitalizedSentence="";
            ServerSocket welcomeSocket = new ServerSocket(3248);
            Socket connectionSocket = welcomeSocket.accept();
            BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
            DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream());
            clientSentence = inFromClient.readLine();
            //System.out.println(clientSentence);
            if (clientSentence.equals("set")) {
                outToClient.writeBytes("connection is ");
                System.out.println("running here");
                //welcomeSocket.close();
                //outToClient.writeBytes(capitalizedSentence);
            }
            capitalizedSentence = clientSentence.toUpperCase() + "\n";
            //if(!clientSentence.equals("quit"))
            outToClient.writeBytes(capitalizedSentence+"enter the message or command: ");
            System.out.println("passed");
            //outToClient.writeBytes("enter the message or command: ");
            welcomeSocket.close();
            System.out.println("connection terminated");
        }
    }
}

Итак, TCPServer.java будет выполнен первым, а затем выполните TCPClient.java , и я пытаюсь использовать предложение if в TCPServer.java , чтобы проверить, что вводит пользователь, теперь я действительно хочу реализовать, как передавать файлы из обе стороны (загрузка и загрузка). Спасибо.

11
задан Greg Mattes 14 October 2011 в 13:28
поделиться