JavaScript -Anfrage in unendlichen Schleifenstopps nach wenigen Minuten stopptJavaScript

Javascript-Forum
Anonymous
 JavaScript -Anfrage in unendlichen Schleifenstopps nach wenigen Minuten stoppt

Post by Anonymous »

IM Verwenden Sie das JavaScript zum Lesen von Daten aus digitalem Sensor, die mit Raspbery Pi verbunden sind (in diesem Fall - Rotary -Encoder, aber es ist nicht so wichtig. Dies könnte jeder andere Sensor oder Controller sein).
In Raspbery Pi gestartet Das Bash -Skript, das den Sensorwert in "cnoder.php" -Datei schreibt, jedes Mal, wenn der Sensorwert geändert wird.
Dieser Code funktioniert perfekt: < /p>




async function fetchData() {

let response = await fetch("encoder.php");

let text = await response.text();

return new Promise(resolve => {
setTimeout(() => resolve(text), 10);
});
}

async function myFunction() {

while (true) {
const data = await fetchData();
document.getElementById("coords").innerHTML = data;
}
}

myFunction();


< /code>
Jedes Mal bin ich dann drehte Encoder - ich sehe den Sensorwert in "Koordeln" Div. to (dies wechselt die Registerkarten auf der Seite abhängig von der Encoder -Richtung): < /p>

async function fetchData() {
let response = await fetch("php/encoder.php");

let text = await response.text();

return new Promise(resolve => {
setTimeout(() => resolve(text), 10);
});
}

async function myFunction() {

while (true) {
const data = await fetchData();
resp = data;
var readState = resp.substr(0,5);
var direction = resp.substr(6);
if (typeof lastState == 'undefined') {lastState = ""};
// console.log(direction);
// console.log(readState);
// console.log(lastState);
if (lastState != readState && lastState != "")
{//console.log(direction)

var test = document.getElementsByClassName("active")[0];
// console.log(test);
test2=test.innerHTML;
// console.log(test2);
var mySubString = test2.substr(10,6);
// console.log(mySubString);

if (mySubString == "ST_NAV" && direction == "CCW")
{

document.getElementById("ST_SCREEN").classList.remove('active');
document.getElementById("SE_SCREEN").classList.add('active');
document.getElementById("ST_nav_el").classList.remove('active');
document.getElementById("SE_nav_el").classList.add('active');
document.getElementById("ST_NAV").classList.remove('active');
document.getElementById("SE_NAV").classList.add('active');

};

if (mySubString == "ST_NAV" && direction == "CW")
{

document.getElementById("ST_SCREEN").classList.remove('active');
document.getElementById("MA_SCREEN").classList.add('active');
document.getElementById("ST_nav_el").classList.remove('active');
document.getElementById("MA_nav_el").classList.add('active');
document.getElementById("ST_NAV").classList.remove('active');
document.getElementById("MA_NAV").classList.add('active');
ShowMap();

};

if (mySubString == "SE_NAV" && direction == "CW")
{

document.getElementById("SE_SCREEN").classList.remove('active');
document.getElementById("ST_SCREEN").classList.add('active');
document.getElementById("SE_nav_el").classList.remove('active');
document.getElementById("ST_nav_el").classList.add('active');
document.getElementById("SE_NAV").classList.remove('active');
document.getElementById("ST_NAV").classList.add('active');

};

if (mySubString == "MA_NAV" && direction == "CW")
{

document.getElementById("DA_SCREEN").classList.add('active');
document.getElementById("MA_SCREEN").classList.remove('active');
document.getElementById("DA_nav_el").classList.add('active');
document.getElementById("MA_nav_el").classList.remove('active');
document.getElementById("DA_NAV").classList.add('active');
document.getElementById("MA_NAV").classList.remove('active');

};

if (mySubString == "MA_NAV" && direction == "CCW")
{

document.getElementById("ST_SCREEN").classList.add('active');
document.getElementById("MA_SCREEN").classList.remove('active');
document.getElementById("ST_nav_el").classList.add('active');
document.getElementById("MA_nav_el").classList.remove('active');
document.getElementById("ST_NAV").classList.add('active');
document.getElementById("MA_NAV").classList.remove('active');

};

if (mySubString == "DA_NAV" && direction == "CCW")
{

document.getElementById("DA_SCREEN").classList.remove('active');
document.getElementById("MA_SCREEN").classList.add('active');
document.getElementById("DA_nav_el").classList.remove('active');
document.getElementById("MA_nav_el").classList.add('active');
document.getElementById("DA_NAV").classList.remove('active');
document.getElementById("MA_NAV").classList.add('active');

};

if (mySubString == "DA_NAV" && direction == "CW")
{
document.getElementById("DA_SCREEN").classList.remove('active');
document.getElementById("RA_SCREEN").classList.add('active');
document.getElementById("DA_nav_el").classList.remove('active');
document.getElementById("RA_nav_el").classList.add('active');
document.getElementById("DA_NAV").classList.remove('active');
document.getElementById("RA_NAV").classList.add('active');
};

if (mySubString == "RA_NAV" && direction == "CCW")
{
document.getElementById("DA_SCREEN").classList.add('active');
document.getElementById("RA_SCREEN").classList.remove('active');
document.getElementById("DA_nav_el").classList.add('active');
document.getElementById("RA_nav_el").classList.remove('active');
document.getElementById("DA_NAV").classList.add('active');
document.getElementById("RA_NAV").classList.remove('active');
};
};
lastState = readState;
}
}

myFunction();



< /code>
Seite Normalerweise funktionierende geschätzte 2-4 Minuten, nach dieser Zeit, die zwischen den Registerkarten geschaltet wird, ist nicht so, als ob die Funktion blockiert oder gefriert wäre. Alle anderen dynamischen Elemente auf Seite arbeiten weiter. Und Seite nicht nach dem Drücken von Aktualisierung oder F5
das Gleiche, wenn ich versuche, eine neue Registerkarte zu öffnen und die Seite "Seiten" einzugeben. Seite erst geladen, bis die Registerkarte mit der nicht arbeitenden Funktion geschlossen ist.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post