gpt4 book ai didi

javascript - 为什么这两个函数调用彼此不相等?

转载 作者:行者123 更新时间:2023-11-30 10:06:11 25 4
gpt4 key购买 nike

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

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

  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 只接受一个参数,所以它不像是将一些奇怪的未知参数传递给函数。

最佳答案

.then()方法希望您向它传递一个函数,因为它(最终)将调用它。如果您只是传递一个(非函数)值,则不会发生这种情况。

调用点.then()就是说,“当操作完成后,请执行这个。”

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

你可以这样做:

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

通过这样做,您可以确保当send最终被调用,它将被称为 this将引用您的 res对象。

关于javascript - 为什么这两个函数调用彼此不相等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29038564/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com