OK. Ich habe keinen Code für diese Frage. Ich frage dies, weil ich neu in Javascript bin. Ich möchte wissen, wie man eine zeitgesteuerte Warteschlange in JS erstellt. Hier ist der Trick.

Ich habe eine Combobox. Die Combobox hat einen extjs-Datenspeicher hinter sich und wird alle 5 Sekunden mit neuen Daten aktualisiert, d. H. Die Combo erhält neue Zeileneinträge.

Die Zeileneinträge können von drei Typen sein: 1,2 und 3. Es können mehrere Zeilen desselben Typs mit unterschiedlicher Zeilen-ID vorhanden sein. Jede Zeile wird aus der Kombination entfernt, wenn 5 Minuten lang keine Aktualisierung erfolgt. Das heißt, wenn ich eine neue Zeile mit Typ 3 aus dem Geschäft bekomme, bleibt sie 5 Minuten in der Combo. Wenn dieselbe Zeile (mit derselben ID und demselben Typ) in den neu abgerufenen Daten angezeigt wird, wird der 5-Minuten-Timer zurückgesetzt und zählt erneut 5 Minuten. Und so weiter.

So erreichen Sie diese Funktionalität in Javascript.

Bitte schreiben Sie Kommentare, wenn Sie nicht verstanden werden.

Hier ist ein Beispiel:

row_1 type1 5 min timer start
row_2 type1 5 min timer start
row_3 type3 5 min timer start
row_2 type2 5 min timer start

Dies ist ein Beispiel für die aktuell abgerufenen Daten. Nach 3 Minuten bekomme ich diese Daten.

row_3 type3 5 min timer start

Der Rest der Zeilen-Timer wird fortgesetzt, bis das 5-Minuten-Limit erreicht ist. Bei Zeile drei wird der Timer jedoch zurückgesetzt und bleibt für die nächsten 5 Minuten in der Kombination.

2
Vlad 10 Okt. 2012 im 02:47

5 Antworten

Beste Antwort

Ich habe dieses Problem durch eine Sitzung gelöst. Die neuesten Daten wurden in der Sitzung geschrieben, sodass die neuen Anforderungen den Daten in der Sitzung entsprachen. Ich habe PHP und JS im Konzert verwendet. Js las durch die PHP-Sitzung

0
Vlad 13 Apr. 2013 im 16:27

Sie müssen eine rekursive Funktion verwenden, die setTimeout () aufruft.

Beispiel:

function myFunc() {
    var minutes = 5;
    //do stuff here
    setTimeout(function() { myFunc() }, minutes*60000 }; 
}

Beim Aufruf von myFunc () wird ausgelöst und ruft sich dann auf einem 5-Minuten-Timer auf. Der Rest der Programmlogik hängt zu 100% von den Endergebnissen ab.

1
Mike H. 10 Okt. 2012 im 07:26

Irgendwo anders:

function ComboRemoval(id)
{
    Lookup your combobox (document.findelementbyid perhaps)
    Find element with value "id"
    remove it
}

Beim Hinzufügen eines Elements zum Kombinationsfeld:

Add the element
setInterval(function() { ComboRemoval(1234)}, 300000);  //FIXED AS PER COMMENTS BELOW

SetInterval löst in 5 Minuten die Funktion ComboRemoval aus und entfernt die ID 1234 aus der Box.

300000 = 5 Minuten (1000 = 1 Sekunde, 60 x 5 = 300 Sekunden, 300 x 1000 = 300000)

1
Gherkin 9 Okt. 2012 im 22:52

Aufbauend auf der Antwort von @ Gherkin mit jQuery:

function addOption(key, text, timeout) {

    var el = $("<option></option>")
         .attr("value",key)
             .text(text);
    ​$('#test').append(el);
    setTimeout(function() { el.remove(); }, timeout);
}

Jetzt können Sie anrufen:

addOption("value", "Text for option", 2000);

Sehen Sie es in Aktion: http://jsfiddle.net/um9Cu/

Sie können addOption () erweitern, um auch ein vorhandenes Element mit dem Schlüssel zu suchen und das Zeitlimit zu verlängern, oder was auch immer Sie tun müssen.

1
gregmac 9 Okt. 2012 im 23:12

Hier müssen Sie zwei Dinge im Auge behalten: Das tatsächliche Element und den Zeitpunkt der letzten Aktualisierung (oder genauer das Timeout-Ereignis, durch das es aktualisiert wird).

timeouts = [];
elems = [];
function updateElem(no){
    //Do your update on elems[no]
    clearTimeout(timeouts[no]);
    timeouts[no] = setTimeout(function(){ removeElem(no) }, 5*60*1000 );
}
function removeElem(no){
    //Remove the element.
}

Dies zeigt das Grundkonzept. Es gibt viel bessere Möglichkeiten, alles zusammenzuhalten, aber die Grundidee ist:

  • Legen Sie eine Zeitüberschreitung für das Objekt fest, um es nach fünf Minuten zu entfernen
  • Beim Aktualisieren eines Objekts:
    • Löschen Sie das vorherige Zeitlimit
    • Legen Sie ein neues Timeout fest

Da JS nicht wirklich multithreaded ist, müssen Sie sich keine Gedanken über Parallelitätsprobleme machen, solange Sie Ihren Umfang herausgefunden haben.

Überprüfen Sie diese Dokumentation, um zu sehen, wie die Timeout-Ereignisse in einem umfassenderen Sinne funktionieren.

3
FrankieTheKneeMan 10 Okt. 2012 im 00:01