为什么我不能将 Node 请求方法直接传递给 Bluebird promises?
Why can't I pass Node request methods directly to Bluebird promises?
完全有可能运行像下面这样的东西:
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);
}
我只能假设 binding/scope 发生了一些问题,但感觉完全没有必要将调用包装在另一个函数中。
可能它需要作为方法调用,.then
不需要。尝试使用 .bind
:
function someMiddleware (req, res, next) {
someAsyncBluebirdOperation().then(res.json.bind(res));
}
完全有可能运行像下面这样的东西:
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);
}
我只能假设 binding/scope 发生了一些问题,但感觉完全没有必要将调用包装在另一个函数中。
可能它需要作为方法调用,.then
不需要。尝试使用 .bind
:
function someMiddleware (req, res, next) {
someAsyncBluebirdOperation().then(res.json.bind(res));
}