Node.js:承诺内的响应

时间:2016-11-19 19:45:34

标签: javascript node.js express promise es6-promise

任何人都可以解释一下为什么:

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

第一个代码运行良好,第二个代码

谢谢!

1 个答案:

答案 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