为什么这两个函数调用不相等?

时间:2015-03-13 17:34:58

标签: javascript express anonymous-function

很抱歉,如果标题太模糊,我不确定如何更好地解释它。

为什么在这种情况下使用匿名函数调用:

  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只接受一个参数,因此它不喜欢它将一些奇怪的未知参数传递给函数。

1 个答案:

答案 0 :(得分:4)

.then()方法希望您传递一个函数,因为它(最终)会调用它。如果你只传递一个(非函数)值,那就不会发生。

调用.then()的意思是说,“当操作完成后,请执行。”

编辑 - 啊好的,抱歉。在这种情况下,问题是当您通过res.send时,send方法将丢失上下文。也就是说,当Promise机制调用send函数时,它不会知道res的值。

你可以这样做:

  .then(res.send.bind(res))

通过这样做,您可以确保在最终调用send时,会调用它,以便this成为对res对象的引用。