Objektmethode mit ES6 / Bluebird verspricht

8

Ich verwende node v0.11.14-nightly-20140819-pre unter Windows mit harmony flag.

Ich habe JavaScript-Objekt mit zwei Methoden in seinem Prototyp definiert:

%Vor%

serviceMethod von Service -Objekt gibt eine Zusage zurück.

Wenn ich User Objekt wie folgt verwende:

%Vor%

this in method2 von Objekt User endet undefined , wenn sie von then aufgerufen wird, sobald das Versprechen erfüllt ist.

Ich habe versucht, die Implementierung von ES6 und Bluebird zu verwenden.

Warum this ist in diesem Fall undefined ?

    
krl 26.11.2014, 12:18
quelle

2 Antworten

12
  

Warum this ist in diesem Fall undefined ?

Weil Sie eine Funktion übergeben, keine Methode, die an eine Instanz gebunden ist. Dieses Problem ist nicht einmal verheißungsspezifisch, siehe Wie kann man auf den richtigen 'diesen' Kontext innerhalb eines Callbacks zugreifen? für das generische Lösung:

%Vor%

Bluebird bietet jedoch eine andere Möglichkeit an nenne die Funktion als Methode:

%Vor%     
Bergi 26.11.2014, 12:26
quelle
5

Ich sollte hinzufügen, dass dies ein generisches Javascript-Problem ist und auch mit einfachen Javascript-Funktionen gelöst werden kann. Zum Beispiel könnten Sie dies auch tun:

%Vor%

Dies verwendet Function.prototype.bind() , das in Javascript eingebaut ist und auf jeder Funktion vorhanden ist. Dadurch wird ein Funktions-Stub erstellt (der an .then() übergeben wird und dieser Stub den gewünschten this -Wert automatisch wieder anfügt, bevor er method2() aufruft.

    
jfriend00 26.11.2014 15:51
quelle