J'ai une application expressjs et sur une route spécifique, j'appelle une fonction qui répond avec un utilisateur de la base de données en appelant res.json
avec le document de base de données en tant que paramètre. J'utilise des bibliothèques basées sur les promesses et je voulais intégrer le rappel où je pose le document de base de données dans la réponse. Mais le programme échoue quand je le fais. Quelqu'un peut-il expliquer pourquoi? console.log
Existe-t-il une différence fondamentale entre les deux méthodes res.json
et console.log
?
Voici un exemple de ce qui fonctionne et ce qui ne fonctionne pas. Supposons que getUserFromDatabase()
renvoie une promesse d'un document utilisateur.
//This works var getUser = function(req, res) { getUserFromDatabase().then(function(doc) { res.json(doc); }); } //This does not work (the server never responds to the request) var getUserInline = function(req, res) { getUserFromDatabase().then(res.json); } //This works (the object is printed to the console) var printUser = function(req, res) { getUserFromDatabase().then(console.log); }
La fonction json
perd sa .then
this
liaison lorsqu'elle est utilisée comme ça depuis. .then
invoque directement sans référence à l'objet parent res
, alors liez-le:
var getUserInline = function(req, res) { getUserFromDatabase().then(res.json.bind(res)); }