2017-10-17 1 views
0

Problèmes avec les blocs Promises et Then.Utilisation d'une fonction de classe à l'intérieur de ce bloc

Fondamentalement, je suis incapable d'accéder à aFunction(x) à partir du bloc alors.

Pourquoi est-ce? Mon code ressemble à:

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) 
    }) 
    } 

} 

Et sur un côté, ai-je réellement besoin de ce bloc de promesses?

+1

'this.aFonction (reste)' => 'aFonction (res)'? – marekful

Répondre

1

Vous pouvez utiliser une fonction de flèche pour preserver le contexte:

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

Ou vous pouvez passer directement à l'aFunctionthen et peut-être utiliser bind pour préserver le contexte.

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

Ou vous pouvez utiliser une variable pour préserver le contexte:

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

Dans ce cas:

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

this ne fait plus référence à l'instance de votre classe, il se réfère à la fonction anonyme que vous transmettez en tant que paramètre à la fonction then ou à n'importe quel contexte qui lui est affecté.

+1

super qui travaille. Cependant pour ma compréhension pourquoi le contexte a perdu en premier lieu? – userMod2

+0

@ userMod2 J'ai modifié ma réponse pour essayer d'expliquer ce qui se passe. – Titus

+0

merci beaucoup. Aussi - cette promesse - l'a-t-elle exigé actially je sentais que c'était pour le bloc alors? – userMod2