【发布时间】:2015-04-06 14:53:43
【问题描述】:
应该完全可以运行类似以下的东西:
function someMiddleware (req, res, next) {
someAsyncBluebirdOperation().then(res.json);
}
但是,如果您在解析处理程序中直接将 res 对象的任何方法作为引用传递,您将收到以下无用的错误:
[TypeError: Cannot call method 'get' of undefined] __stackCleaned__: true
如果您将对 res.json 的调用包装在另一个函数中,一切似乎都很好:
function someMiddleware (req, res, next) {
function wrapper(result) {
res.json(result);
}
someAsyncBluebirdOperation().then(wrapper);
}
我只能假设绑定/作用域发生了一些问题,但是将调用包装在另一个函数中感觉完全没有必要。
【问题讨论】:
-
这并不能解决问题。
.then方法只需调用一个函数。res.json是一个函数。它应该接受它。 -
res.json不是函数而是方法——这意味着它依赖于this。虽然在这种情况下可能会很烦人,但它比需要携带上下文的函数要好得多,因为它可以静态分配。Response类可以自动绑定其方法,但是当res.json可以作为方法正常调用时(大多数情况下可以),这是一个巨大的性能损失。
标签: javascript node.js promise bluebird