2016-05-24 12 views
1

Es klingt wie eine seltsame Frage: Wie kann ich den Ausführungskontext von einem ES6-Modul verlassen?ES6 Module, stoppen Ausführung von Code

Siehe das folgende Beispiel: Module1 erfordert einige Funktionen im Browser vorhanden zu sein (sagen wir einige neue Sachen, die nicht jeder Browser aktuell implementiert).

Sie möchten eine Überprüfung im Modul durchführen, wenn die erforderliche Funktion verfügbar ist, und wenn nicht, möchten Sie die Ausführung stoppen.

Wenn Sie das mit einem sofortigen Funktionsaufruf schreiben, können Sie einfach return aufrufen und der folgende Code wird nie ausgeführt.

Wie geht das in einem ES6-Modul? Muss ich den ganzen Code in einen if Block einpacken?

+0

hängt davon ab, was Sie exportieren. Wenn Sie eine Funktion exportieren, können Sie ... wie bereits erwähnt von ihr zurückkehren, anderenfalls könnten Sie etwas anderes exportieren, wenn es nicht unterstützt wird. –

+0

Was macht das Modul? Welche Dinge exportiert es? Welche (anderen) Dinge sollten exportiert werden, wenn diese Funktionen nicht verfügbar sind? Oder: Soll das Modul überhaupt geladen werden, wenn es nicht verfügbar ist? – Bergi

Antwort

0

Wenn Sie einen ausführbaren Code aus einem ES6 Modul exportieren, sind Sie in der Regel um eine Funktion:

export function myFunction() { 
    ... 
} 

--- 

import { myFunction } from './module'; 
myFunction(); 

Diese Funktion wie jede andere Werke, die Sie direkt in das aufrufende Modul definieren. Sie können einfach return an den Anrufer als würden Sie anders:

export function myFunction() { 
    if(...) return; 

    ... 
} 
+0

In meinem Fall exportiere ich eine Funktion, füge aber weiterhin Eigenschaften zur Funktion hinzu. Ich will das nicht machen, wenn es sowieso nicht funktioniert. Die Überprüfung ist also mehr oder weniger außerhalb der exportierten Funktion. – Fuzzyma

1

gibt es keine speziellen Werkzeuge (das ich kenne) in ES6/ES2015, dies zu tun. Außerdem müssen alle Exporte auf oberster Ebene erfolgen. Dies bedeutet auch, dass, wenn ein Modul jemals einen bestimmten Export hat, es immer exportieren wird. Der Wert dieses Exports kann sich natürlich ändern, aber die Export- "Schnittstelle" muss immer dieselbe sein.

Wenn Sie bestimmte Werte nicht exportieren möchten, wenn eine Bedingung nicht erfüllt ist, können Sie dies nicht tun. Sie können jedoch immer die Werte null oder undefined in diesem Fall vornehmen. Wenn das Exportieren kein Problem darstellt, gibt es einige Tools von ES5 und davor, die Sie verwenden können.

Die IIFE (wie Sie wissen):

(function() { 
    ... 
    if (someCondition) { 
    return; 
    } 
    // code that won't run 
})(); 

Eine einzelne Iteration for Schleife (keine Ahnung, warum diese verwenden würde, aber man konnte):

for (var i = 0; i < 1; i++) { 
    ... 
    if (someCondition) { 
    break; 
    } 
    // code that won't run 
} 

Und ein guter Old- if Anweisung:

... 
if (!someCondition) { 
    // code that won't run 
} 
+0

Könnte gut sein, um ein Beispiel für die Aktualisierung oder Änderung des exportierten Werts aufzunehmen, da dies für Leute, die neu in der Syntax sind, nicht offensichtlich ist. – loganfsmyth

Verwandte Themen