为什么 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/