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

标签 javascript function promise callback invoke

为什么最后调用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/

相关文章:

javascript - 在 Javascript 中制作数字表程序(如 12 x 1 = 12)时出现问题

javascript - 如何在 node.js 中使用 promise

javascript - 非常简单,非常流畅,JavaScript 跑马灯

javascript - Jquery/Handlebars 错误消息 - Uncaught TypeError : Object [object Object] has no method 'match'

c++ - 这个指向非静态成员函数代码的指针不起作用的原因是什么?

javascript - 对返回不可链接的 Promise<void> 的函数的异步支持

javascript - 从 Firebase 数据库中的两个 Promise 获取结果

javascript internet explorer 字节顺序标记

javascript - Highcharts:从 CSV 加载数据时默认禁用系列

r - 计算 x^2*y, 5*x+sin(y) 的雅可比矩阵