Why cant I inline call to res.json?
express, javascript, node.js, promise
Solution
The `json` function loses its correct `this` binding when used like that since `.then` is going to invoke it directly without reference to the `res` parent object, so bind it:
var getUserInline = function(req, res) {
getUserFromDatabase().then(res.json.bind(res));
}
Problem
I have and expressjs application and on a specific route I call a function that responds with a user from the database by calling `res.json` with the database document as parameter. I use promise based libraries and I wanted to inline the callback where I am putting the database document in the response. But the program fails when I do so. Can somebody explain why? I also wonder why inlined calls to `console.log` actually do work. Is there some fundamental difference between the two methods `res.json` and `console.log`? Here is an example of what works and what does not work. Assume `getUserFromDatabase()` returns a promise of a user document. ``` //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); } ```