Rolf B: Funktion mit fetch() soll kein Promise, sondern Daten liefern

Beitrag lesen

Hallo ebody,

sowohl fetch wie auch XMLHttpRequest (Ajax) arbeiten asynchron. JavaScript im Browser macht keine synchrone I/O, das kann nur node.js.

Es war einmal anders. Die open-Methode von XMLHttpRequest kennt einen async-Parameter, dem Du false übergeben kannst. Dann läuft der Request synchron ab.

Synchrone HTTP Requests im Hauptthread sind missbilligt. Die Browserhersteller sind dabei, dieses Szenario als Fehler zu definieren. NICHT MACHEN!!!

Wenn Du einen WebWorker erstellst, sind synchrone Requests zulässig. Aber ein WebWorker läuft selbst asynchron zum Hauptthread.

Es muss doch möglich sein, eine Funktion zu erstellen, mit der ich Daten abfrage. Diese Funktion wartet so lange bis die Daten geladen sind und gibt die Daten zurück.

In WebWorkern und in Batch-Tools, die mit Node.js laufen - ja.

In einem ereignisorientierten Umfeld - nein. Das trifft für Browser zu und für Serverdienste mit node.js. Dort ist JavaScript ein Tool zur Ereignisverarbeitung und jeder JavaScript-Aufruf muss schnell fertig werden, denn so lange ein Event verarbeitet wird, müssen alle übrigen warten. Ein Browser oder Server würden dadurch blockiert werden.

Das ist das Grundprinzip aller graphischen UIs - der User macht was und daraus resultieren Ereignisse. Diese werden ans Anwenderprogramm geschickt und eins nach dem anderen verarbeitet. Ein paar Ereignisse können in eine Queue gestellt werden, aber nur eine Handvoll, denn andernfalls würde eine langsame Verarbeitung dazu führen, dass der User nichts mehr tut, aber das Programm noch sekundenlang den Ereignissen hinterher hechelt. Deswegen blockiert das UI, wenn die Eventqueue voll ist.

Rolf

--
sumpsi - posui - obstruxi