为什么我不能将 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));
}