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:
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
?
Warum
this
ist in diesem Fallundefined
?
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%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.
Tags und Links javascript node.js promise bluebird