任何人都可以解释一下为什么:
somePromise()
.then(content => res.status(200).jsonp(content))
.catch(err => res.status(500).send(err));
不等同于:
somePromise()
.then(res.status(200).jsonp)
.catch(res.status(500).send);
第一个代码运行良好,第二个代码
谢谢!
答案 0 :(得分:4)
在第一个示例中,.jsonp
和.send
被调用为res
对象上的方法。这是必要的,以使它们正常工作;他们必须有权访问响应对象。
在第二个示例中,您传递了对.jsonp
和.send
函数的引用,但是当它们被调用时,它们不会作为res
上的方法调用。这意味着他们无权访问响应对象,导致它们失败。
<强>更新强>
早些时候,我曾说过你可以修改第二个例子来使用.bind
,它应该可以工作:
somePromise()
.then(res.status(200).jsonp.bind(res))
.catch(res.status(500).send.bind(res));
这是不正确的。如果您执行上述操作会发生的情况是响应将始终具有500状态代码。那是因为执行是这样的:
res.status
设为200 res
绑定到.jsonp
res.status
设为500。res
绑定到.send
.jsonp
或.send
。两者都绑定到res
,其状态代码设置为500