2016-08-23 2 views
-1

У меня возникла проблема из-за объема/загрузки/загрузки. В дальнейшем Auth0Lock определяется внутри блока if в строке 6, но не сразу за его пределами или внутри класса. Кто-нибудь знает, почему?Область применения с ES6 классами и модульной системой

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

Потому что тот, кто его написал, не написал рабочий код javascript. Попробуйте спросить его. –

+0

@TamasHegedus Ах! Вы тоже видели эту ошибку на замке! Правильно, извините, я думал, вы говорите обо мне! : D – user1775718

+0

Да, его код действительно работает. Если вы измените var для let, он получит блок в скобках 'if' ... – user1775718

ответ

2

let ключевое слово блок области видимости: https://developer.mozilla.org/nl/docs/Web/JavaScript/Reference/Statements/let

let x = "hey"; 
{ let x= "hi"; } 

Внешний let x не переписывается, потому что в его собственной области. Вернемся к вашему вопросу. Ваш let Auth0Lock существует только в блоке if.

+0

HAHA !! Да, я только что сработал! : D будет принимать через секунду ... – user1775718

1

Код пытается определить, запущен ли он в браузере (typeof window === "object" в браузере), и если он делает это, он пытается загрузить модуль 'auth0-lock' с помощью некоторого загрузчика модуля стиля CommonJS.

Есть две большие проблемы с тем, что:

Если он предназначен для работы на nodejs стороне, а также модуль выбросит TypeError: Auth0Lock не определен в строке 11, поскольку она не определена для реального.

Если он запущен в браузере, он все равно будет вызывать TypeError, потому что ключевое слово let является блочным, поэтому в строке 11 оно еще не определено.

Смежные вопросы