2012-09-29 7 views

Antwort

1

Für requireJS:

Sie haben eine Rückruf Methode neben der erforderlichen Module zu .require() passieren, das ausgelöst wird erhalten, wenn die Ressourcen erfolgreich geladen wurden. Sie sollten also nur innerhalb dieses Rückrufs auf geladene AMD- oder CommonJS-Module zugreifen können.

für NodeJS:

Ja, .require() synchron arbeiten. NodeJS verwendet das CommonJS-Modulsystem, nicht AMD.

2

Es gibt zwei verschiedene synchronous Konzepte hier. Der erste ist "Wird es meine gesamte Webseite stoppen und sitzen und auf die Datei warten.".

Die Antwort ist nein. RequireJS macht das nicht, wenn Sie ein Skript mit Abhängigkeiten haben.

Wenn Sie es entsprechend verwenden, verwendet es ein Versprechen-System. Das bedeutet, dass wenn Sie Ihren Rückruf senden und Ihre Anforderungen für diese Datei definieren, der Rückruf nicht ausgeführt wird, bis alle erforderlichen Dateien geladen sind.

Wenn innerhalb einer dieser erforderlichen Dateien ein Requirement erforderlich ist, wird THAT Callback nicht ausgeführt, bis ITS-Abhängigkeiten geladen wurden.

Der äußerste Rückruf (der am unteren Rand Ihres Skripts normalerweise ist), wird nicht ausgeführt, bis alles drin ist.

Dies funktioniert auf einem Versprechen System. Es lohnt sich zu verstehen, wie vielversprechende Systeme funktionieren (ähnlich wie in einem Beobachter-Muster). Sie sind dazu bestimmt, herumgereicht oder angekettet zu werden, basierend auf einem Ereignis, anstatt mehrere Personen in beliebiger Reihenfolge anzuhören.

var widget = new Widget(), 
    widgetLoaded = widget.load(url); // return a promise to let the program use the widget 

widgetLoaded.then(function() { widget.move(35); }) 
      .then(function() { widget.setColour("Blue"); }) 
      .then(function() { widget.show(); }); 

Das ist wie this so Rückkehr, dass Sie Kette Funktionsaufrufe, mit der Ausnahme, dass die Anrufe bis widget.load() abgeschlossen ist geschehen nicht wirklich.

Die widget wird tatsächlich steuern, wenn dies geschieht, indem sie ihre Versprechen hält, wenn das Widget lädt und alles in Ordnung ist, oder indem sie ihr Versprechen brechen, wenn etwas schief gelaufen ist.

In den meisten Versprechen Systeme, .then oder was auch immer sie es nennen, entweder nimmt zwei Funktionen (gehalten und gebrochen - in meinen Systemen, brokens sind immer optional), oder sie nehmen ein Objekt mit success und failure-$.ajax tut dies und lässt Sie dann vorgeben, was Sie mit den Daten machen wollen, wenn sie geladen werden oder wenn sie fehlschlägt - verspricht.

So funktioniert Ihre Seite immer noch zu 100% asynchron (ohne die Benutzeroberfläche zu unterbrechen), aber sie ist zu 100% synchron, da alle Module in der richtigen Reihenfolge ausgelöst werden.

Eine Sache, die Sie dürfen nicht vergessen,: Wenn Sie diese Abhängigkeiten in Ihrem Code haben, können Sie keine Abhängigkeiten haben am unteren Rand des Skripts herumliegen, warten inline zu laufen. Sie müssen alle in Ihrem Rückruf gesperrt sein oder in einer Funktion gesperrt sein, die darauf wartet, von Ihrem Rückruf angerufen zu werden.

Dies ist einfach, weil es ein asynchroner Prozess ist, in Bezug auf die tatsächliche Verarbeitung und den Browser von Laufveranstaltungen/JS nicht blockieren, wodurch die Seite, et cetera.

Verwandte Themen