为什么我不能内联调用res.json
Why cant I inline call to res.json?
我有一个expressjs应用程序,在特定的路由上,我调用一个函数,该函数通过以数据库文档为参数调用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);
}
json
函数在这样使用时会丢失其正确的this
绑定,因为.then
将直接调用它,而不引用res
父对象,所以绑定它:
var getUserInline = function(req, res) {
getUserFromDatabase().then(res.json.bind(res));
}
相关文章:
- 如何使jQuery插件函数可调用以供独立使用,而不在集合上操作
- D3在一个调用中绘制不同的SVG形状,没有可见性
- 如何从Java/scala调用js美化程序
- 如何调用这个匿名 JavaScript 函数
- 如何从模块链中调用函数.导出到节点中
- 我需要从php调用javascript或jquery
- Chrome开发工具(如何知道我在调用哪个javascript对象)
- 单击按钮后如何逐个调用分区,上一个分区将隐藏
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- Twitter Bootstrap typeahead:使用“this”获取上下文/调用元素
- node.js:setInterval()正在跳过调用
- 如何在单击复选框后调用控制器方法
- 如何在JQuery函数中定义一个值,然后调用另一个函数并使用该值
- 使用Google Visualization动态调用构造函数
- 如何将async.whilst调用的结果发送到和express.js res.send()
- 如何在使用sails JS执行res.view()函数调用之前调用另一个服务(函数)
- 何时在节点中调用res.on(end)
- 为什么我不能内联调用res.json
- 数组在res.json()中为空,但在res.json()调用之前和之后都存在
- res.write在nodejs中阻止服务器响应其他请求,直到你调用res.end