为什么我不能直接将Node请求方法传递给Bluebird承诺?

时间:2015-02-06 12:50:16

标签: javascript node.js promise bluebird

应该完全可以运行以下内容:

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);
}

我只能假设绑定/范围发生了一些问题,但是必须将调用包装在另一个函数中是完全没必要的。

1 个答案:

答案 0 :(得分:1)

可能需要将其作为.then不能执行的方法调用。尝试使用.bind

function someMiddleware (req, res, next) {        
    someAsyncBluebirdOperation().then(res.json.bind(res));
}