Ich möchte in der Lage sein, ständig etwas zu testen, bis es wahr ist. Jedes Mal, wenn es falsch ist, wird die if-Anweisung erneut getestet.

Ich habe es versucht:

var repeat_until = 0;
while(repeat_until == 0) {
    if(a condition) {
        repeat_until = 1;
    }
}

Aber natürlich hat es nicht funktioniert, irgendwelche vorschläge?

-2
Density 16 Aug. 2015 im 01:10

4 Antworten

Beste Antwort

Ich würde nicht empfehlen, 10000 Anweisungen in einer Millisekunde ausführen zu lassen. Also würde ich eine setInterval anstelle einer while Schleife geben. Geben Sie hier eine while-Schleife, die für den CPU-Zyklus zu teuer ist, da es sich um einen einzelnen Thread handelt. Überprüfen Sie dies heraus:

$(function () {
  setInterval(function () {
    $("#console").prepend("<p>TEST: " + ($("input").is(":checked")) + "</p>");
  }, 1000);
});
* {font-family: 'Segoe UI';}
p {margin: 0 0 5px;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<input type="checkbox" />
<div id="console"></div>
1
Praveen Kumar Purushothaman 15 Aug. 2015 im 22:14

Da reguläres Javascript Single-Threaded ist, kann kein anderes Javascript ausgeführt werden, wenn Sie in einer engen Schleife wie dieser sitzen, und daher kann kein anderes Javascript jemals Ihre repeat_until -Variable ändern oder Ihren Zustand beeinflussen, also die while -Schleife wird zu einer Endlosschleife, da kein anderer Code jemals ausgeführt werden kann, um die Bedingung zu erstellen, auf die Sie warten.

Wenn Sie genau erklären, auf welche Bedingung Sie warten, können wir Ihnen wahrscheinlich helfen, Code besser auszuführen, wenn diese Bedingung erfüllt ist. Möglicherweise müssen Sie mit setInterval() abfragen, oder es wird eine direkte Benachrichtigung über ein Ereignis angezeigt, das Sie verwenden können. Die richtige und beste Methode zum Ausführen von Code, wenn Ihre Bedingung erfüllt ist, hängt jedoch ganz davon ab, um welche Bedingung es sich handelt und was die Änderung der Bedingung steuert.

Hier ist zum Beispiel eine Lösung, die einmal pro Sekunde abfragt und anderen Codes die Möglichkeit gibt, ausgeführt zu werden:

var interval = setInterval(function() {
    if (a condition) {
         clearInterval(interval);
         // do your other work here
    }
}, 1000);
1
jfriend00 15 Aug. 2015 im 22:13

Kommt darauf an, was a condition ist. Hier ist ein Arbeitsbeispiel: http://jsfiddle.net/0aecfcng/

var repeat_until = 0;
var temp = 0;
while(repeat_until == 0) {
    if(temp >= 10) {
        repeat_until = 1;
    }
    temp += 1;
}
1
lhan 15 Aug. 2015 im 22:13

Hier ist ein Beispiel https://jsfiddle.net/s6Lt96kp/5/

function change(){
    var value = false;
    var a = 0;
    while(value == false ) {
        if(a==4) {
            value = true;
        } else {
           a++;
        }
    }
}
0
amaiaeskisabel 15 Aug. 2015 im 22:22