Synchron/Asynchron - wer hat Vorrang
Umlauf
- javascript
0 Der Martin
0 unknown0 Der Martin
0 unknown
Hallo,
wenn ich eine AJAX- Anfrage (synchron) und eine synchronen Anfrage zur gleichen Zeit absende, wer hat dann vorrang? kann es sein, dass die synchrone Abfrage unterbrochen wird wegen der AJAX- Anfrage oder umgekehrt?
lg
Hi,
wenn ich eine AJAX- Anfrage (synchron) und eine synchronen Anfrage zur gleichen Zeit absende, ...
das ist gar nicht möglich. Javascript arbeitet zwar ereignisgesteuert und damit scheinbar an mehreren Stellen gleichzeitig; echte Gleichzeitigkeit gibt es aber nicht. Also wird immer eine der beiden Anfragen früher sein als die andere.
wer hat dann vorrang? kann es sein, dass die synchrone Abfrage unterbrochen wird wegen der AJAX- Anfrage oder umgekehrt?
Nein. Die Anfrage an den Server geht in beiden Fällen sofort raus - in der Reihenfolge, wie die send-Methode aufgerufen wurde.
Nach dem Senden der synchronen Anfrage wartet JS aber innerhalb der send-Methode, bis die Antwort da ist, während beim asynchronen Aufruf die Methode sofort zurückkehrt und die Antwort "irgendwann" eintrifft (und damit das Ereignis "onreadystatechange" auslöst, das in einer eigenen Handler-Funktion bearbeitet werden kann).
So long,
Martin
das ist gar nicht möglich. Javascript arbeitet zwar ereignisgesteuert und damit scheinbar an mehreren Stellen gleichzeitig; echte Gleichzeitigkeit gibt es aber nicht. Also wird immer eine der beiden Anfragen früher sein als die andere.
Genau genommen immer der synchrone Request.
Hallo,
das ist gar nicht möglich. Javascript arbeitet zwar ereignisgesteuert und damit scheinbar an mehreren Stellen gleichzeitig; echte Gleichzeitigkeit gibt es aber nicht. Also wird immer eine der beiden Anfragen früher sein als die andere.
Genau genommen immer der synchrone Request.
kommt drauf an, was du meinst.
Beispiel in Pseudocode:
DoSomething();
SendRequest(ASYNC, ...);
SendRequest(SYNC, ...);
Hier wird selbstverständlich der asynchrone Request(!) zuerst gesendet, und dann erst der synchrone. Die Antworten (responses) werden aber, unabhängig davon, wann der Server sie verschickt, in umgekehrter Reihenfolge bearbeitet. Denn dieser Code würde nach dem Senden des synchronen Requests untätig auf die Antwort warten, und sich *ersst dann* um die Antwort des asynchronen Requests kümmern, die in der Zwischenzeit eingetroffen sein könnte.
Deine Formulierung ist also nicht ganz korrekt; es müsste heißen: Die *Antwort* auf den synchronen Request wird immer zuerst bearbeitet, nicht der Request selbst.
So long,
Martin
Deine Formulierung ist also nicht ganz korrekt; es müsste heißen: Die *Antwort* auf den synchronen Request wird immer zuerst bearbeitet, nicht der Request selbst.
Ok, so gesehen stimmt das, aber dem OP ging es um die Antwort(um genau zu sein die Behandlung dieser durch Javascript) und nicht um den Request als solchen.
Das kam meiner Meinung in deiner Antwort nur zwischen den Zeilen zum Ausdruck.
Hallo,
Deine Formulierung ist also nicht ganz korrekt; es müsste heißen: Die *Antwort* auf den synchronen Request wird immer zuerst bearbeitet, nicht der Request selbst.
Ok, so gesehen stimmt das, aber dem OP ging es um die Antwort(um genau zu sein die Behandlung dieser durch Javascript) und nicht um den Request als solchen.
vermutlich hast du Recht, aber das stand so deutlich nicht im Text. Deswegen hatte ich etwas weiter ausgeholt und versucht, den Ablauf zu verdeutlichen.
Nur als du dann nachhelfen wolltest und schriebst, der synchrone *Request* werde zuerst bearbeitet, wollte ich den Unterschied zwischen Request und Response herausarbeiten; so war deine Aussage strenggenommen falsch.
Das kam meiner Meinung in deiner Antwort nur zwischen den Zeilen zum Ausdruck.
Richtig, die Schlussfolgerung "Synchron ist früher fertig" hatte ich nicht ausformuliert.
Ciao,
Martin