我有并且表达了应用程序,并且在特定路径上,我调用了一个函数,该函数通过使用数据库文档作为参数调用res.json
来响应来自数据库的用户。我使用基于promise的库,我想内联回调,我将数据库文档放在响应中。但是当我这样做时,程序失败了。有人可以解释一下原因吗?我也想知道为什么内联调用console.log
实际上可行。两种方法res.json
和console.log
之间是否存在一些根本区别?
这是一个有效和无效的例子。假设getUserFromDatabase()
返回用户文档的承诺。
//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);
}
答案 0 :(得分:12)
json
函数在使用时失去了正确的this
绑定,因为.then
将直接调用它而不引用res
父对象,因此绑定它:
var getUserInline = function(req, res) {
getUserFromDatabase().then(res.json.bind(res));
}