Frage zu setTimout

guten_tag

Grünschnabel
Hallo,

ich möchte gerne eine Funktion mit setTimout aufrufen und danach noch weiteren Code ausführen:
Code:
setTimout(andereFunc, 1000);
alert(ergebnis);

Mit setTimeout gibt man allerdings nur den Befehl, eine andere Funktion in 1000ms aufzurufen. Danach wird die Abarbeitung des Scripts sofort fortgesetzt.

Nun zur Frage: Gibt es eine Möglichkeit, nach dem Aufruf von setTimeout solange zu warten, bis andereFunc abgearbeitet wurde (das setTimeout hat aber schon einen Grund, also einfach andereFunc() schreiben geht nicht)?

Wäre sehr froh über eine Lösungsmöglichkeit oder einen Ansatz dazu...

Grüße,

guten_tag
 
Hallo,

dann muss ich die Frage anders stellen:

Code:
function tue_was()
{
  setTimeout(andereFunc, 1000);
  
  return ergebnis;
}

//sehr zeitintensive Funktion
function andereFunc()
{
  //Berechnung
  ergebnis = 100;
}

var x = tue_was();
//weitere Verarbeitung von x

Was ist nun brauche ist eigenltich so eine Art join() wie wir es aus JAVA kennen, sodass an der Stelle auf alle asynchron laufenden "Threads" gewartet wird:

Code:
function tue_was()
{
  setTimeout(andereFunc, 1000);
  
  join();

  return ergebnis;
}

//sehr zeitintensive Funktion
function andereFunc()
{
  //Berechnung
  ergebnis = 100;
}

var x = tue_was();
//weitere Verarbeitung von x

Die Frage ist also, wie join() aussehen muss.

Sowas hier funktioniert natürlich nicht (achtung: pseudo-code!):

Code:
function join() 
{
  while(threads have not completed their work) { };
}
Dies führt dazu, dass die Meldung "Skript stoppen" kommt, da andereFunc wie gesagt eine aufwändige Berechnung enthält. Mit setTimeout kann man meiner Meinung nach in join() aber auch nicht arbeiten, denn ja gewartet werden soll, was bei setTimeout nicht der Fall ist, da dies eine Aufsplittung des Kontrollflusses zur Folge hat.

Hat jemand eine Idee?

Grüße,

guten_tag
 
Zuletzt bearbeitet:
Dann hast du ein Problem, denn JS kann nicht asynchron arbeiten(mal von AJAX abgesehen) :(
 
Zuletzt bearbeitet:
Hi

Ich bin mir immernoch nicht sicher ob ich die frage richtig verstanden habe, aber wenn du auf etwas warten willst bevor was weitergeht habe ich sowas ähnliches:

Code:
var ready = false;

function tue_was()
{
  setTimeout(andereFunc, 1000);
  
  ready = true;
  return ergebnis;
}

function waitForScript(){
  if(!ready)setTimeout("waitForScript()", 10);
  else //Methode die x braucht;
}

//sehr zeitintensive Funktion
function andereFunc()
{
  //Berechnung
  ergebnis = 100;
}

var x = tue_was();

//weitere Verarbeitung von x

Wäre ein Lösungsvorschlag, was besseres würde mir nicht einfallen.
MfG
 

Neue Beiträge

Zurück