2017-02-02 5 views
3

Ich habe den folgenden Code, der beim Ausführen gegen Babel funktionierte. Jetzt, wo ich bin mit Harmonie bekomme ich folgende Fehlermeldung:ES6-Knoten async/erwarte unerwartete Kennung

let adResult = await ad.isUserValid(domainPath, password); 
^^ 
SyntaxError: Unexpected identifier 

Die folgende Klasse Funktion:

class ActiveDirectoryHelper { 
    constructor(options) { 
     this.config = options.config 
     this.ad = null; 
    } 

    connect() { 

     var config = { 
      url: this.config.url, 
      baseDN: this.config.baseDN, 
      attributes: this.config.attributes 
     }; 

     if (this.config.account.user.length > 0) { 
      config.username = this.config.account.user; 
      config.password = this.config.account.password; 
     } 

     this.ad = new ActiveDirectory(config); 
    } 

    async isUserValid(user, password) { 
     return new Promise((resolve, reject) => { 

      this.ad.authenticate(user, password, (err, auth) => { 
       if (err) { 
        reject({ 
         code: 500, 
         message: "Unknown authentication error", 
         entry: {} 
        }); 
       } 

       if (auth) { 
        resolve({ 
         code: 200, 
         message: "OK", 
         entry: { 
          user: user, 
          password: password 
         } 
        }); 

       } else { 
        reject({ 
         code: 400, 
         message: "Authentication failed", 
         entry: {} 
        }); 

       } 

      }); 
     }); 
    } 
... 

exports.ActiveDirectoryHelper = ActiveDirectoryHelper; 

ich die Klasse wie folgt verwenden:

const ad = new ActiveDirectoryHelper({ 
    config: adConfig 
}); 
ad.connect(); 

const domainPath = domain.length > 0 ? `${domain}\\${user}` : user; 
const adResult = await ad.isUserValid(domainPath, password); 

Ich betreibe den Code unter Verwendung der folgenden Parameter:

node --harmony --use_strict --harmony-async-await user.js <my parameters> 

Wenn ich nehme die await beim Aufruf der Methode:

const adResult = ad.isUserValid(domainPath, password); 

dann habe ich den Fehler nicht, aber es tut auch warten, bis das Verfahren abgeschlossen ist. Ich habe den Fehler gegoogelt und es scheint, als ob Sie nur in einer Funktion verwenden können, die Async in ist. Aber ohne außerhalb des Methodenaufrufs zu warten, wartet es nicht, bis es beendet ist. Irgendwelche Ideen?

+1

, welche Version von 'node' verwenden Sie? – Sridhar

+0

Es klingt, als ob Sie eine alte Version von Node verwenden. Jede Version von Node 4.3 sollte das Schlüsselwort let unterstützen. – Aron

+0

Ihr habt recht Ich habe Computer gewechselt, von denen ich dachte, dass sie die neueste Version 7 hätten. Sobald ich sie aktualisiert habe, hat es funktioniert. Danke für den Tipp – adviner

Antwort

5

Es ist, weil Sie await nicht verwenden können, es sei denn, es ist in einer async Funktion.

Siehe diesen Link für Details:

'await Unexpected identifier' on Node.js 7.5

+1

Dieser Fehler ist in einer asynchronen Funktion aufgetreten und konnte nicht erkannt werden. Ich hatte eine Wartezeit in einem 'array.forEach (item => {x = erwarten ...})' Aufruf, natürlich ist das eine Funktion, also musste ich sie nur async machen: 'array.forEach (async item = > {x = erwarten ...}) ' –

Verwandte Themen