• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Funktion soll auf andere "fremde" Funktion / Werte warten - geht das?

StechusKaktus

New member
Hallo jswelt Community,

ich habe ein kleines Problem und komme dort nicht ganz weiter.

Ich habe eine Funktion die ganz normal etwas berechnet. Nun benötige ich aber einen Wert, welche von einer anderen Funktion berechnet / geliefert wird. Ich kann nicht bestimmen, wann die andere Funktion
aufgerufen wird, da diese von einem Server her ausgeführt wird.
Habt ihr evtl. eine Idee, oder sogar eine Lösung?

Ich hatte erst an callbacks gedacht, wüsste aber nicht, wie ich das machen könnte.
Oder irgendwie, dass ich die Ausführung meiner gewünschten Funktion solange wartet (ohne jetzt den rest lahmzulegen), bis die andere Funktion zum Beispiel einen wert einfach in eine globale Variable legt... Aber ich kann mir vorstellen, dass ist jetzt auch nicht die beste Lösung.

Hier mal ein Beispiel Code, was hoffentlich mein Problem etwas genauer beschreibt:

Code:
function main(){

   // createElement soll erst ausgeführt werden, wenn die Funktion
   // setValues mir die Werte liefern kann.
   var description = "hier ist zum beispiel text drin oder ähnliches";

   // Jetzt brauche ich die Werte von setValues, dessen Funktionsaufruf ich aber nicht zeitlich bestimmten / kontrollieren kann.
   createElement( position, description );

}

// Vom Server aufgerufen.
function setValues( val1, val2 ){
   // ... führt code aus
   // zum beispiel Rückgabe durch globale variable setzen.
   glob_var = position;
}

Ich hoffe, ihr könnt mir tipps geben, oder sogar helfen.
Ich weiss, dass sieht komisch aus. Hat etwas mit nen Client - Server Javascript token zu tun und
habe erst jetzt gemerkt, dass auch solch ein weg benötigte, da irgendwie nicht alle Werte gleichzeitig da sind.


Thx für eure Hilfe.

Stechuskaktus
 
Zuletzt bearbeitet:
Ich kann nicht bestimmen, wann die andere Funktion aufgerufen wird, da diese von einem Server her ausgeführt wird.
server-seitige Funktionen werden immer *vor* allen client-seitigen Funktionen ausgeführt.

Und selbst wenn du AJAX nutzt, kannst du dann callbacks verwenden.

Solltest du WebSockets o.ä. benutzen (wo tatsächlich die Aktion vom Server ausgeht) mußt du dich nur in die entsprechenden notification-events einhängen (also auch wieder callbacks).


Code:
   // zum beispiel Rückgabe durch globale variable setzen.
   glob_var = position;
Das dürfte hier tatsächlich das größte Problem darstellen.
 
Wenn die Funktion setValues() wirklich in JS defineirt ist und durch den "Server" aufgerufen wird, kannst du da doch einfach einen Aufruf der main()-Funktion reinbauen:
Code:
function main(position){

   // createElement soll erst ausgeführt werden, wenn die Funktion
   // setValues mir die Werte liefern kann.
   var description = "hier ist zum beispiel text drin oder ähnliches";

   // Jetzt brauche ich die Werte von setValues, dessen Funktionsaufruf ich aber nicht zeitlich bestimmten / kontrollieren kann.
   createElement( position, description );

}

// Vom Server aufgerufen.
function setValues( val1, val2 ){
   // ... führt code aus
   // zum beispiel Rückgabe durch globale variable setzen.
   main(position);
}


PS: deine Funktionsnamen sind nicht wirklich aussagekräftig...
 
Wegen den Funktionsnamen, tut mir leid. Aber ich wollte hier halt bloss Beispielfunktionen hinschreiben um mein Problem besser verdeutlichen zu können.

Mhh, wahrscheinlich müsste ich das wirklich irgendwie so umbauen, dass meine Funktion durch den "Server" aufgerufen wird.

Aber trotzdem würde es mich interessieren, ob ich die Werte, welche vom Server kommen, in meine "schon laufende" Funktion einfließen lassen kann.

Gibt es da eine Möglichkeit? Hätte da jemand einen Code Beispiel, weil ich das mit dem Callbacks so verstanden habe, aber nicht weiss,
wie ich sowas bezüglich meines Problems umsetzen muss.

Thx for help
 
Kein Problem wegen den Funktionsnamen. Wenn das keine Produktivnamen sind, ist das ja in Ordnung. Wollte es nur anmerken.

Aber dein ganzer Aufbau wird hier immer rätselhafter. In JS kann man keine "schon laufende" Funktion haben und daneben etwas anderes anstoßen. JS ist single threaded (außer du verwendest WebWorker - dann hättest du aber einen falschen logischen Aufbau) und wenn eine Funktion "läuft", wird alles andere blockiert. So friert der Browser dann auch ein. Du kannst also Daten in etwas "schon Laufendes" nicht einfließen lassen, da du vom Server da nichts bekommen kannst.

Aber erklär' doch mal genauer deinen Aufbau.
 
Zurück
Oben