Node.js callbacks e questo - come dovrebbe essere risolto?

4

Ogni programmatore JavaScript ha familiarità con this "problema" (può essere considerato come una funzione, a seconda delle varie condizioni) - this è recentemente associato:

let foo = {
    bar(){return this;}
};
let _bar = foo.bar;
_bar() === foo.bar(); // false; 

_bar() valuta l'oggetto globale o undefined in base alla presenza di 'use strict' direttiva e foo.bar() valuta a foo .

Node.js ha una convenzione per fornire callback di "errore prima".

La mia domanda è - cosa dovrebbe essere impostato dalla libreria come this di callback? EventEmitter istanze impostate this nell'istanza dell'emettitore e sarebbe la soluzione più ovvia per me - ma non riuscivo a trovare le librerie popolari usando questo modello.

I metodi di istanze native Array usano pattern Array.prototype.method = function(fn, thisArg=null){} con l'ultimo argomento che è this context. Sembra essere una buona soluzione per i metodi a lunghezza costante, ma per le funzioni variad ha casi limite con this impostato su un'istanza di funzione.

Parlando fuori dal nodo, jQuery usa $.ajax({context: thisArg}) per impostare l'argomento this di callback.

Quindi quale sarebbe la soluzione migliore per es. classe che astrae i dettagli di implementazione dell'utente?

User.getUserByLogin('nick', function(err, user) {
     // user is User instance
     user.updateUser({name: 'new name'}, function(err){
         // what SHOULD be 'this' here?
     });
});
    
posta Ginden 10.08.2015 - 13:28
fonte

1 risposta

2

La mia prima raccomandazione generale su this , è che non la uso, rende i programmi più difficili da leggere senza un vero vantaggio. L'eccezione principale è costituita dalle funzioni di costruzione.

In una libreria puoi semplicemente lasciare this di un callback globale / non definito, qualsiasi cosa tu passi come valore this può anche essere passato come un altro parametro.

    
risposta data 11.08.2015 - 08:14
fonte

Leggi altre domande sui tag