NEWS
Script auf Ende einer Funktion warten lassen
-
Hallo,
ich möchte ein Script erstellen, das eine globale Funktion aufruft.
Die globale Funktion soll auf einen bestimmten Zustand eines Datenpunktes warten und den Wert an das Script zurückgeben. Das Script soll dabei warten, bis die globale Funktion beendet ist.
Leider deaktiviert sich sich die Javascript-Instanz jedesmal. Ich habe auch schon alles mögliche mit 'async' und 'await' getestet.
Weiss jemand eine Möglichkeit, dies zu realisieren? -
@dondento zeigmal das script
-
Sollte eigentlich so funktionieren:
Script:
....
setState('0_userdata.0.MessageBox.cmdString','Fehler;Bitte Menge oder Stückzahl eingeben;OK;Cancel');
result = Messagebox(); Hier sollte das Script auf 'result' warten.
....Globale Funktion:
var result;
async function MessageBox()
{
var cmdString = getState('0_userdata.0.MessageBox.cmdString').val;
var cmdArray = cmdString.split(';');if (cmdArray.length<3) return; setState('0_userdata.0.MessageBox.Titel', cmdArray[0],true); setState('0_userdata.0.MessageBox.Text',cmdArray[1],true); setState('0_userdata.0.MessageBox.Button1.Text', cmdArray[2],true); result='NaN'; setState('0_userdata.0.MessageBox.Button1.Sichtbar',true); setState('0_userdata.0.MessageBox.Button1.Clicked',false); if (cmdArray.length==3) { setState('0_userdata.0.MessageBox.Button1.PositionX',215,false); setState('0_userdata.0.MessageBox.Button1.PositionY',170,false); setState('0_userdata.0.MessageBox.Button2.Sichtbar',false,false); } if (cmdArray.length==4) { setState('0_userdata.0.MessageBox.Button1.PositionX',70,false); setState('0_userdata.0.MessageBox.Button1.PositionY',170,false); setState('0_userdata.0.MessageBox.Button2.Text',cmdArray[3],true); setState('0_userdata.0.MessageBox.Button2.Sichtbar',true,false); setState('0_userdata.0.MessageBox.Button2.Clicked',false,false); setState('0_userdata.0.MessageBox.Button2.PositionX',320,false); setState('0_userdata.0.MessageBox.Button2.PositionY',170,false); } setStateDelayed('0_userdata.0.MessageBox.Sichtbar',true,500) await schleife(); setState('0_userdata.0.MessageBox.Result'/*Result*/,result,true); setState('0_userdata.0.MessageBox.Sichtbar'/*Sichtbar*/,false,true); return result;
}
function schleife()
{
while(result == 'NaN') {}
}// Button 1 wurde geklicked
on ({id:'0_userdata.0.MessageBox.Button1.Clicked',val:true}, async function(obj){
obj.state.val=false;
setState('0_userdata.0.MessageBox.Result',getState('0_userdata.0.MessageBox.Button1.Text').val);
result=getState('0_userdata.0.MessageBox.Button1.Text'/Text/).val;
});// Button 2 wurde geklicked
on ({id:'0_userdata.0.MessageBox.Button2.Clicked',val:true}, async function(obj){
obj.state.val=false;
setState('0_userdata.0.MessageBox.Result',getState('0_userdata.0.MessageBox.Button2.Text').val);
result=getState('0_userdata.0.MessageBox.Button2.Text'/Text/).val;
}); -
@dondento Ne so geht das nicht.
Wenn du auf das Ende einer
async function
warten willst, brauchst du einawait
vorm Aufruf (hierresult = await MessageBox()
).
Außerdem sind Dauerschleifen zum "warten" tödlich und sorgen dafür dass gar nix mehr geht.
Am besten setzt du dich mal mit Promises und asynchroner Programmierung auseinander. -
@alcalzone
Das habe ich mir schon gedacht.Vielen Dank