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

问题描述 投票:-1回答:1

为什么在最后调用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。为什么会这样?

javascript function promise callback invoke
1个回答
0
投票

getPosts()表示调用函数,getPosts是正确的函数引用

现在,当promise得到解决时(或当promise get invoke中的resolve方法时,将调用一个回调,因此您需要在那时传递getPosts的引用]

当您传递getPosts()时,它将立即被调用,因此仅打印两个已存在于posts数组中的帖子,而无需等待诺言得到解决。

© www.soinside.com 2019 - 2024. All rights reserved.