Synchronisierte Ausführung asynchroner JavaScript-Funktionen
In bestimmten Situationen kann es notwendig sein, asynchrone JavaScript-Funktionen synchron auszuführen, ohne jedoch die Benutzeroberfläche einzufrieren . Obwohl dies im Allgemeinen nicht als bewährte Vorgehensweise gilt, gibt es bestimmte Fälle, in denen es als notwendig erachtet werden kann.
Die Herausforderung
Das Ziel besteht darin, die Funktion bis zum Rückruf zu blockieren aufgerufen wird, ohne dass die Benutzeroberfläche einfriert. Dies stellt eine Herausforderung dar, da das Blockieren von JavaScript normalerweise zum Einfrieren der Benutzeroberfläche führt.
Mögliche Lösung
Eine mögliche Lösung besteht darin, mithilfe von Polling eine globale Variable zu überprüfen, die durch den Rückruf festgelegt wird . Hier ist ein Beispiel:
function doSomething() { // Callback sets received data to a global variable function callBack(d) { window.data = d; } // Start the async myAsynchronousCall(param1, callBack); } // Start the function doSomething(); // Clear the global data window.data = null; // Poll at an interval until data is found in the global var intvl = setInterval(function() { if (window.data) { clearInterval(intvl); console.log(data); } }, 100);
Dieser Ansatz ermöglicht es der aufrufenden Funktion, zu blockieren, bis die Daten vom Rückruf empfangen werden, ohne dass die Benutzeroberfläche einfriert. Es wird jedoch davon ausgegangen, dass die Funktion doSomething() geändert werden kann, um die globale Variable zu verwenden.
Best Practice
Es ist wichtig zu beachten, dass dieser Ansatz als suboptimal angesehen wird Lösung. Im Idealfall sollten asynchrone Aufrufe mithilfe von Rückrufen oder Versprechen abgewickelt werden, anstatt die Funktion zu blockieren. In bestimmten Codebasen, die nicht einfach geändert werden können, kann dies jedoch als vorübergehende Problemumgehung erforderlich sein.
Das obige ist der detaillierte Inhalt vonKönnen asynchrone JavaScript-Funktionen synchron ausgeführt werden, ohne dass die Benutzeroberfläche einfriert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!