为什么then承诺块中没有console.log的括号? 它怎么知道应该记录什么?
const Category = require('./models/category');
const cat = Category.find({}).then(console.log);
答案 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便可以稍后执行它。>