很抱歉,如果标题太模糊,我不确定如何更好地解释它。
为什么在这种情况下使用匿名函数调用:
Team
.findAll()
.then(function(teams) {
res.send(teams);
});
但是将res.send
直接传递到.then()
,它不起作用:
Team
.findAll()
.then(res.send);
这会导致此错误:
Possibly unhandled TypeError: Cannot read property 'method' of undefined
at res.send (/opt/web/projects/node_modules/express/lib/response.js:83:27)
at Promise._settlePromiseAt (/opt/web/projects/node_modules/sequelize/lib/promise.js:76:18)
at process._tickCallback (node.js:442:13)
阿伦这两个人是否相等? res.send
只接受一个参数,因此它不喜欢它将一些奇怪的未知参数传递给函数。
答案 0 :(得分:4)
.then()
方法希望您传递一个函数,因为它(最终)会调用它。如果你只传递一个(非函数)值,那就不会发生。
调用.then()
的意思是说,“当操作完成后,请执行此。”
编辑 - 啊好的,抱歉。在这种情况下,问题是当您通过res.send
时,send
方法将丢失上下文。也就是说,当Promise机制调用send
函数时,它不会知道res
的值。
你可以这样做:
.then(res.send.bind(res))
通过这样做,您可以确保在最终调用send
时,会调用它,以便this
成为对res
对象的引用。