为什么nodejs函数参数在显式调用时表现不同?

时间:2017-07-03 13:16:25

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

我正在重构我的nodejs应用程序并尝试使代码看起来更干净,然后我在直接调用函数时遇到了这个问题。

这有效:

router.route('/').get(({ query }, res, next) => {
ItemsLogic.getItems(query)
  .then((items) => res.json(items))
  .catch(next)

})

但这会引发错误:

router.route('/').get(({ query }, res, next) => {
ItemsLogic.getItems(query)
  .then(res.json)
  .catch(next)

})

错误是:"无法读取属性' app'未定义"。它在快速响应的json()函数内部,与该方法中的this对象有关,由于某种原因未定义。

1 个答案:

答案 0 :(得分:0)

函数内this的值取决于它的调用方式。

鉴于res.json();thisres

鉴于var foo = res.json; foo();this res

json函数关注this的值。通过res.json,您将获取json(函数)的值,并将其与res断开,就像上面的第二个示例一样。