Si consideri il seguente codice:JavaScript: Promises + questo
foo: function() {
var self = this;
var p1 = p2 = someFunctionThatReturnsAPromise();
Promise.all([p1, p2])
.then(self.bar);
}
bar: function(promises) {
var self = this;
console.log(self);
}
uscita:
undefined
Ma se faccio la seguente invece:
foo: function() {
var self = this;
var p1 = p2 = someFunctionThatReturnsAPromise();
Promise.all([p1, p2])
.then(function(result) {
self.bar(result);
});
}
bar: function(promises) {
var self = this;
console.log(self);
}
uscita:
{ foo: [Function],
bar: [Function] }
Non capisco perché la prima chiamata cambia dove questo punti nella funzione della barra. Qualcuno può illuminarmi?
Perché è molto importante come si chiama una funzione. Leggi questo: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this Nel tuo primo esempio hai "smontato" il metodo dall'oggetto contesto, quindi l'hai perso. – dfsq
Questo non ha nulla a che fare con le promesse, vedi [Come accedere al corretto 'this'/contesto all'interno di un callback?] (Http://stackoverflow.com/q/20279484/1048572) per altre soluzioni – Bergi
@dfsq: I wouldn usare anche il termine "detouched". Non ci sono metodi in JS, le funzioni diventano solo quando vengono chiamati come proprietà dell'oggetto. Al contrario, non sono legati. – Bergi