为什么在最后调用getPost
功能时不需要括号?
我对功能括号感到困惑。
我尝试了解承诺链。原始代码如下:
const posts = [
{ title: 'Post One', body: 'This is Post One' },
{ title: 'Post Two', body: 'This is Post Two' },
];
//(Three posts listed - callback right after post)
function createPost(post) {
return new Promise((resolve, reject) => {
setTimeout(() => {
posts.push(post);
const error = false;
if (!error) {
resolve();
} else {
reject("Error. Something went wrong")
}
}, 2000);
});
}
function getPosts() {
setTimeout(() => {
let output = '';
posts.forEach((post, index) => {
output += `<li>${post.title}</li>`
})
document.body.innerHTML = output;
}, 1000)
};
createPost({ title: 'Post Three', body: 'This is Post Three' })
.then(getPosts)
.catch (err => console.log(err));
我想知道为什么不应该将其设为.then(getPosts())
吗?没有括号的函数的先前答案仅用于指代该函数,而不是在此时调用该函数(即,在我的情况下为.then
)。
但是我想我打算在.then
位置调用该函数,以便控制台将打印出下面的文本(这是正确的结果:]
Post One
Post Two
Post Three
我以什么方式认为是错误的?
如果.then
确实仅用作参考,则要调用的函数的实际位置在哪里?
[此外,如果确实为getPosts添加(),则它仅返回Post One和Post Two。为什么会这样?
getPosts()表示调用函数,getPosts是正确的函数引用
现在,当promise得到解决时(或当promise get invoke中的resolve方法时,将调用一个回调,因此您需要在那时传递getPosts的引用]
当您传递getPosts()时,它将立即被调用,因此仅打印两个已存在于posts数组中的帖子,而无需等待诺言得到解决。