2016-08-23 7 views
-1

Ich habe ein Problem aufgrund des Umfangs/Hub/Ladereihenfolge. Im folgenden wird der Auth0Lock innerhalb des if Blocks auf der Linie 6 definiert, aber nicht unmittelbar außerhalb davon oder innerhalb der Klasse. Weiß jemand warum?Scope mit ES6-Klassen und Modul-System

import { EventEmitter } from 'events'; 
import { isTokenExpired } from './jwtHelper'; 

console.log('in'); 
const isClient = typeof window !== 'undefined'; 
if (isClient) { 
    let Auth0Lock = require('auth0-lock').default; 
    console.log('isClient'); 
    console.log('Auth0Lock inner', Auth0Lock); 
} 
    console.log('Auth0Lock outer', Auth0Lock); 
export default class AuthService extends EventEmitter { 
    constructor(clientId, domain) { 
    super(); 
    console.log('happening'); 
    if (!isClient) { 
     console.log('returning'); 
     return false; 
    } 
    // Configure Auth0 
    this.lock = new Auth0Lock(clientId, domain, {}); 
    // Add callback for lock `authenticated` event 
    this.lock.on('authenticated', this._doAuthentication.bind(this)); 
    // Add callback for lock `authorization_error` event 
    this.lock.on('authorization_error', this._authorizationError.bind(this)); 
    // binds login functions to keep this context 
    this.login = this.login.bind(this); 
    } 

// curtailed 
} 
+0

Weil der, der es geschrieben hat, keinen funktionierenden JavaScript-Code geschrieben hat. Versuche ihn zu fragen. –

+0

@TamasHegedus Ah! Du hast diesen Fehler auch am Schloss gesehen! Richtig, Entschuldigung, ich dachte, du sprichst von mir! : D – user1775718

+0

Ja, sein Code funktioniert tatsächlich. Wenn Sie die Variable für eine Variable ändern, wird die Blockierung in die 'if' geschweiften Klammern umgewandelt ... – user1775718

Antwort

1

Der Code versucht, zu bestimmen, ob es in einem Browser (typeof window === "object" in einem Browser) läuft, und wenn es so tut, versucht es das 'auth0-lock' Modul mit einigen Commonjs Stil Modul-Lader zu laden.

Es gibt zwei große Probleme mit, dass:

Wenn es beabsichtigt ist, als auch auf NodeJS Seite zu laufen, wird das Modul ein TypeError: Auth0Lock werfen nicht auf der Linie 11 definiert ist, weil es nicht für reale definiert ist.

Wenn es im Browser ausgeführt wird, wird immer noch ein TypeError ausgelöst, da das Schlüsselwort let Block-Bereich ist, also in Zeile 11 ist es immer noch nicht definiert.