2017-10-17 4 views
0

Probleme mit Promises und Then-Blöcken.Verwenden einer Klassenfunktion in Block

Grundsätzlich kann ich aFunction(x) von dem dann Block nicht zugreifen.

Warum ist das? Mein Code sieht wie aus:

class myClass { 

    aFunction(x) { 
    ... 
    } 

    bFunction(y) { 
    return new Promise(function (resolve, reject) { 
     request(options, function (error, response, body) { 
     if (!error && response.statusCode == 200) { 
      resolve(body.token) 
     } else { 
      console.log('ERROR: ' + err) 
      return reject(false) 
     } 
     }) 
    }).then(function(res){ 
     this.aFunction(res) 
    }) 
    } 

} 

Und auf einer Randnotiz, benötige ich tatsächlich diesen Versprechenblock?

+1

'this.aFunktion (Rest)' => 'aFunktion (res)'? – marekful

Antwort

1

Sie können einen Pfeil Funktion Erhalter den Kontext verwenden:

.then(res => { 
    this.aFunction(res) 
}); 

Oder Sie können die aFunction direkt an then und möglicherweise bind den Kontext zu erhalten verwenden übergeben.

.then(this.aFunction.bind(this)); 

Sie können auch eine Variable verwenden, um den Kontext zu bewahren:

var self = this; 
... 
.then(function(res){ 
    self.aFunction(res) 
}) 

In diesem Fall:

.then(function(res){ 
    this.aFunction(res) 
}); 

this bezieht sich nicht mehr auf die Instanz der Klasse, es bezieht sich auf die anonyme Funktion, die Sie als Parameter an die then-Funktion oder an den Kontext übergeben, für den sie festgelegt wurde.

+1

toll, dass worls. Aber für mein Verständnis, warum der Kontext an erster Stelle verloren? – userMod2

+0

@ userMod2 Ich habe meine Antwort bearbeitet, um zu erklären, was vor sich geht. – Titus

+0

vielen dank. Auch - das Versprechen - es tat actally erforderlich Ich fühlte es war, um die dann blockieren? – userMod2

Verwandte Themen