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? -
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? -
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;
}); -
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 functionwarten willst, brauchst du einawaitvorm 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. -
@dondento Ne so geht das nicht.
Wenn du auf das Ende einer
async functionwarten willst, brauchst du einawaitvorm 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
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden