2016-05-13 12 views
-1

I Mungo-Middleware wie so schreibt, mit ES6:Anonym Funktion vs Lambda in Mungo

userSchema.pre('save', (next) => { 
    // something... 
    next(); 
}); 

Und das hat nicht funktioniert. Die Middleware wurde aufgerufen, aber "dies" bezog sich nicht auf das Dokument, das gespeichert wurde. Ich habe dann die Lambda-Syntax los:

userSchema.pre('save', function(next) { 
    // something... 
    next(); 
}); 

Und es hat funktioniert!

Ich habe seit einiger Zeit glücklich mit Lambdas mit Node, weiß jemand, was das Problem ist? (Ich sehe hier bereits eine question zu diesem Thema, ich würde jedoch eine grundlegende Antwort schätzen).

+0

Ein Lambda ist eine anonyme Funktion - eine Funktion ohne Namen. Ihre beiden Beispiele sind Lambdas. Aber ja, Pfeilfunktionen haben lexikalisches 'this'. – naomik

Antwort

2

Ja, das ist das erwartete Verhalten, wenn Pfeil-Funktionen verwenden, dies fängt den Wert des einschließenden Kontextes, so dass:

function Person(){ 
    this.age = 0; 

    setInterval(() => { 
    this.age++; // |this| properly refers to the person object 
    }, 1000); 
} 

var p = new Person(); 

den lexikalischen Siehe diesen Abschnitt in der MDN Seite unten für weitere Informationen: Dies ist https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions#Lexical_this

groß, weil vorher würden wir Code wie diesen schreiben müssen:

function Person() { 
    var self = this; // Some choose `that` instead of `self`. 
        // Choose one and be consistent. 
    self.age = 0; 

    setInterval(function growUp() { 
    // The callback refers to the `self` variable of which 
    // the value is the expected object. 
    self.age++; 
    }, 1000); 
} 

Die Co Die Proben werden direkt aus dem MDN-Artikel entnommen.