我想我已经调用了该函数,但函数名称旁边没有附加括号



为什么在最后调用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中的resolve方法被调用时(,会调用一个回调。因此,您需要在中传递getPosts的引用

当您传递getPosts((时,它将立即被调用,因此只打印posts数组中已经存在的两个post,而无需等待得到解决的承诺

相关内容

  • 没有找到相关文章

最新更新