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

时间:2018-12-17 22:26:42

标签: javascript node.js

为什么then承诺块中没有console.log的括号? 它怎么知道应该记录什么?

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

3 个答案:

答案 0 :(得分:4)

它正在传递函数 reference 作为回调。 console.log指的是承诺解析后与实际调用console.log相对的函数

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

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

请注意,它与then(x => console.log(x)) 不完全相同。任何上下文都会丢失,因为被调用方无法从函数引用中恢复该上下文。尽管这对AFAIK无效。

答案 1 :(得分:0)

这是对将在Category.find()之后调用的函数的引用。传递给它的值将是查找的结果。

答案 2 :(得分:0)

console.log()回调中调用then不会在控制台中输出任何内容。通常,您可以将匿名函数或箭头函数传递给回调参数,但是由于console.log几乎可以将任何东西作为参数,因此您只需传递函数名,Promise便可以稍后执行它。