Pourquoi ne peux-je pas appeler en ligne pour res.json?

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