Heim >Web-Frontend >js-Tutorial >Wie „synchronisiere' ich asynchrone Javascript-Aufrufe?

Wie „synchronisiere' ich asynchrone Javascript-Aufrufe?

Barbara Streisand
Barbara StreisandOriginal
2024-11-17 13:50:02962Durchsuche

How to

Asynchrone JavaScript-Aufrufe synchronisieren

Einführung

Asynchrone JavaScript-Funktionen ermöglichen es uns, Aufgaben gleichzeitig auszuführen ohne den Hauptthread zu blockieren. In bestimmten Szenarien kann es jedoch erforderlich sein, eine asynchrone Funktion synchron aufzurufen, wodurch die aktuelle Ausführung effektiv blockiert wird, bis die Aufgabe abgeschlossen ist.

Implementierung

Im Gegensatz zur gängigen Meinung Meiner Meinung nach ist es unmöglich, die asynchrone Ausführung von JavaScript wirklich zu blockieren, ohne die Benutzeroberfläche zu beeinträchtigen. Ein Ansatz zum Simulieren einer Blockierung besteht darin, eine globale Variable abzufragen und darauf zu warten, dass sie von der Callback-Funktion festgelegt wird.

function doSomething() {

  // Global variable for callback data
  window.data = null;

  function callBack(d) {
    window.data = d;
  }

  // Start asynchronous call
  myAsynchronousCall(param1, callBack);

  // Start polling interval
  var intvl = setInterval(function() {
    if (window.data) {
      clearInterval(intvl);
      console.log(data);
    }
  }, 100);
}

Obwohl diese Methode ein halbblockierendes Verhalten erreicht, ist sie nicht ideal, da sie dazu führen kann zu erheblichem Leistungsaufwand.

Bevorzugte Lösung

Wenn möglich, ist es vorzuziehen, eine Rückruffunktion an den asynchronen Aufruf zu übergeben und ihn das Ergebnis verarbeiten zu lassen, wenn er bereit ist:

function doSomething(func) {

  function callBack(d) {
    func(d);
  }

  myAsynchronousCall(param1, callBack);
}

doSomething(function(data) {
  console.log(data);
});

Dieser Ansatz vermeidet den Abfrageaufwand und ermöglicht eine effizientere asynchrone Verarbeitung.

Das obige ist der detaillierte Inhalt vonWie „synchronisiere' ich asynchrone Javascript-Aufrufe?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn