为什么最后调用getPost
函数时不需要括号?
我对函数括号感到困惑。
我尝试理解 promise 链。原代码如下:
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 添加 (),它只会返回帖子一和帖子二。为什么会这样?
最佳答案
getPosts() 表示调用函数,getPosts 是函数引用,你没看错
现在 then 需要一个回调,当 Promise 得到解析时(或者当 Promise 中的解析方法被调用时)将会被调用,所以你需要在 then 中传递 getPosts 的引用
当你传递 getPosts() 时,它将立即被调用,因此只打印 posts 数组中已经存在的两个帖子,而无需等待 Promise 得到解决
关于javascript - 我想我已经调用了该函数,但函数名称旁边没有附加括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58898796/