javascript - 为什么 Promise 中的方法没有括号?

标签 javascript node.js

为什么 Promise 的 then block 中的 console.log 没有括号? 它如何知道应该记录什么?

const Category = require('./models/category');
const cat = Category.find({}).then(console.log);

最佳答案

它传递一个函数引用作为回调。 console.log指的是 Promise 解析时调用的函数,而不是实际调用 console.log .

函数是 JavaScript 中的一流对象。它们可以被传递。就像你会做的那样then(x => console.log(x)) 。如果您事先调用它,则必须先对其进行评估(并传递其返回值):

promise.then(console.log()) // Called immediately, undefined passed to then

请注意,它与 then(x => console.log(x))完全相同。任何上下文都会丢失,因为被调用者无法仅从函数引用中恢复上下文。虽然这在这里没有效果,据我所知。

关于javascript - 为什么 Promise 中的方法没有括号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53823885/

相关文章:

javascript - 如何在运行时动态重新配置 Drupal 的基于 jQuery 的自动完成功能?

javascript - 如何在 ui-sref 中转义 UI 路由器参数

JavaScript 变形按钮

javascript - Sails.JS - NTLM 身份验证失败时重试?

node.js - 需要 ('../' )在 node_modules/.bin 的脚本中

node.js - 回送在 modelName.afterRemoteError 上给出未定义

arrays - 如何从 json 中删除空数组。我数组中没有元素,我想删除数组。它的嵌套数组

javascript - 如何在 PHP 中检测数据库事件时创建 Web 通知

node.js - 在浏览器中使用 Browserify 捆绑导出

javascript - 在浏览器中调整到移动 View 时,图像会覆盖另一个 div